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