5 android sax saxparser saxparseexception android-xml
关于 Android 上使用 Java 的 Sax XML 解析器的问题:我需要解析从 Web 获取的 XML 文件,但我无法控制该文件。有些包含错误并导致解析器因“标签不匹配”或“格式不正确(无效标记)”等错误而中止。
这些错误对我来说并不重要,我想忽略它们并继续前进,我可以处理损坏的 XML 结构。但我无法修复 XML 文件,它们不是我的。我如何告诉 Android 上的 Sax(类 org.xml.sax.XMLReader)不要抛出异常并继续运行?附加 ErrorHandler 不起作用,捕获异常也没有用,因为我无法在停止的地方继续解析。
我的 XML 不是 HTML,但这里有一些 (X)HTML 示例,浏览器会忽略错误并继续运行。我也想做这个。
我不想编写自己的解析器来处理字符集转换等。我不需要验证 XML。这是我的代码,精简为要点:
XMLReader r = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
r.setErrorHandler(new MyLenientErrorHandlerThatNeverThrows());
r.setContentHandler(new MyImporterThatExtendsDefaultHandler());
r.parse(new InputSource(new BufferedReader(...)));
Run Code Online (Sandbox Code Playgroud)
谢谢!
小智 2
好吧,看来是做不到了。Sax 支持错误检测,但不支持错误恢复,这使得它不太适合本示例中的健壮代码。通过使用 XmlPullParser 重新格式化 Sax 使其工作,这允许将下一个令牌调用包装在 try-catch 块中:
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(in);
int type = xpp.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG: startTag(xpp); break;
case XmlPullParser.END_TAG: endTag(xpp); break;
case XmlPullParser.TEXT: characters(xpp.getText()); break;
}
try {type = xpp.next();}
catch (XmlPullParserException e) {}
}
} catch (Exception e) {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3652 次 |
| 最近记录: |