results <- parse_and_import `catch` exception_handler
case results of
[] -> do
- -- One of the arrows returned "nothing."
- report_error $ "Unable to determine DTD for file " ++ path ++ "."
- return False
+ -- One of the arrows returned "nothing." Now that we're
+ -- validating against the DTDs, this will almost always be
+ -- caused by a document whose DTD is not present (i.e. is
+ -- unsupported). So we return "success" to allow the XML file to
+ -- be deleted.
+ report_error $ "No DTD for file " ++ path ++ "."
+ return True
(ImportFailed errmsg:_) -> do
report_error $ errmsg ++ " (" ++ path ++ ")"
return False
| otherwise = do
let infomsg =
"Unrecognized DTD in " ++ path ++ ": " ++ dtd ++ "."
+ -- This should be an impossible case while DTD
+ -- validation is enabled. If we can parse the file at
+ -- all, then we have a DTD for it sitting around. And we
+ -- only have DTDs for supported types.
return $ ImportUnsupported infomsg