XmlPullParser ...在凌乱的HTML上遇到异常,如何让它更健壮?

时间:2015-07-08 14:31:20

标签: android xmlpullparser

来自独立提供商的html文件包含如下标记:

<link href="//abc...." rel="stylesheet" type="text/css">

所以,最后/之前&gt;没有编码。它应该是&#34; ... /&gt;&#34;。 如何避免解析器在此异常上生成异常?

我的代码是:

try {
    factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(false);
    // updated, as suggested below
    factory.setValidating(false);
    factory.setFeature(Xml.FEATURE_RELAXED, true); 
    factory.setNamespaceAware(true);
    parser = factory.newPullParser();
    parser.setInput(is);
    eventType = parser.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT) {
        String tagname = parser.getName();
        // etc. 

2 个答案:

答案 0 :(得分:0)

您不应该使用XML pull解析器来解析不整齐的HTML,它永远不能保证可以工作。

无论如何,我对一个HTML大部分都没问题的网站进行了实验,我注意到自Android 3以来最新版本的KXmlParser(XMLPullParser的底层实现)比旧版本更严格,它们忽略了FEATURE_RELAXED标志。因此,如果您想要一个更宽容的XMLPullParser,您可以将Gingerbread版本的KXmlParser直接复制到您的项目中,并使用它来代替框架的版本。

答案 1 :(得分:0)

见BladerCoder的第一句话。谢谢。

这回答了我的问题。

*

  

您需要在获得拉动之前完全配置工厂   解析器实例:Factory使用其当前配置进行创建   实例

*

此外,只是处理源中偶然错误的例外工作正常。我无法影响(正确)创建源文件。