我發現Android的內置SAX解析器中的XmlPullParser.END_DOCUMENT
標記有雙重處理。代碼很簡單: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
- 它是數據的結束還是最終的標籤?
雖然你是指「崩潰」? – 2012-04-16 05:02:58
xpp.next() - 在XML文檔中支持無效字符,儘管我期待在到達XML文檔的最終標記後它會停止解析 - 並且在大多數設備上它的工作方式與其他人所描述的不同 – barmaley 2012-04-16 05:04:38
無法理解爲什麼它試圖解析END_DOCUMENT標記的/>之後,它應該退出循環。直到看到它,我纔會相信它,我應該拿哪個設備? – 2012-04-16 05:13:47