XmlPullParser.END_DOCUMENT的模糊解释

时间:2012-04-16 05:00:02

标签: java android xml sax

我在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 - 它是数据的结尾还是最终的标签?

1 个答案:

答案 0 :(得分:0)

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