【发布时间】:2012-03-12 16:37:08
【问题描述】:
关于 Android 上使用 Java 的 Sax XML 解析器的问题:我需要解析从 Web 获取的 XML 文件,而我无法控制。有些包含错误并导致解析器中止并出现“不匹配标签”或“格式不正确(无效令牌)”等错误。
这些错误对我来说并不重要,我想忽略它们并继续前进,我可以处理损坏的 XML 结构。但我无法修复 XML 文件,它们不是我的。如何告诉 Android 上的 Sax(类 org.xml.sax.XMLReader)不要抛出异常并继续运行?附加 ErrorHandler 不起作用,捕获异常也没有用,因为我无法在它停止的地方恢复解析。
我的 XML 不是 HTML,但这里有一些 (X)HTML 示例,其中浏览器会忽略错误并继续运行。我也想这样做。
- 浏览器可以使用“
”而不是“
”,即使标签从未关闭。 - “ text ”即使结束标签的顺序错误也能正常工作。
- “odds & ends”被接受,尽管令牌无效,“odds & ends”是正确的。
我宁愿不编写自己的解析器,处理字符集转换等等。我不需要验证 XML。这是我的代码,简化为基本内容:
XMLReader r = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
r.setErrorHandler(new MyLenientErrorHandlerThatNeverThrows());
r.setContentHandler(new MyImporterThatExtendsDefaultHandler());
r.parse(new InputSource(new BufferedReader(...)));
谢谢!
【问题讨论】:
标签: android sax saxparser android-xml saxparseexception