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