XmlPullParser.END的模糊解释

我在Android的内置SAX解析器中发现了XmlPullParser.END_DOCUMENT标记的双重处理。 代码很简单:

    String s; //actually contains XML
    //blah-blah
    factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(false);
    xpp = factory.newPullParser();
    StringReader sw=new StringReader(s);
    xpp.setInput(sw);
    int eventType = xpp.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT)
    {
        if (eventType == XmlPullParser.START_TAG)
        {
               //blah-blah
        }
        else if(eventType==XmlPullParser.TEXT)
        {
               //blah-blah
        }
        else if (eventType == XmlPullParser.END_TAG)
        {
               //blah-blah
        }
        eventType=xpp.next();
    }

如果XML文档基本看起来像(String s):

<?xml version="1.0" encoding="utf-8"?>
<templates>
    <template key="Person" name="Person">
        <field key="Photo" name="Photo" type="image" hint="Press to select image"/>
    </template>
</templates>

有了这一切工作正常。 但是如果在最后一个标记之后还有一些额外的字符</templates> - 这里会出现奇怪的一面(我的XML的性质是这样的,有时在最终标记之后可能会出现一些乱七八糟的符号)。

对于几乎所有的Android设备(大约90%),SAX解析器忽略了额外的字符,但在一些设备中 - 大多数是带有ICS的设备 - SAX解析器试图解析额外的字符和崩溃。

所以问题是:XML标准是什么意思? SAX解析器是否应该在最终的标签之后解析额外的符号? 而无论如何是XmlPullParser.END_DOCUMENT - 它是数据的结束还是最终的标记?


如果根元素的结束标记后面有非空白字符,则该文件不是格式良好的XML,并且解析器需要向应用程序报告此事实。

链接地址: http://www.djcxy.com/p/5949.html

上一篇: Fuzzy interpretation of XmlPullParser.END

下一篇: Ignoring DTD when parsing XML