XmlPullParser.END_DOCUMENT
Android のビルトイン SAX パーサーでは、タグが 2 重に扱われていることがわかりました。コードは簡単です:
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
それはデータの終わりですか、それとも単なる最終タグですか?