我在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
- 它是数据的结尾还是最终的标签?
答案 0 :(得分:0)
如果在根元素的结束标记之后有非空白字符,则该文件不是格式良好的XML,并且解析器需要将此事实报告给应用程序。