0

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

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

4

1 回答 1

0

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

于 2012-04-16T07:59:45.907 回答