XmlPullParser.END_DOCUMENT
タグの2倍の処理がAndroidの組み込みSAXパーサーにあります。コードは単純です:XML文書は基本的には(文字列s)のように見えます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 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
は何ですか?データの終わりか、最後のタグのどちらかですか?
どのように「クラッシュ」を意味しますか? –
xpp.next() - XMLドキュメントの無効な文字を送信しますが、XMLドキュメントの最終タグに達した後に解析を停止することを期待していましたが、ほとんどのデバイスでは他のデバイスで記述されているとおりに動作しません。 – barmaley
理解できませんEND_DOCUMENTタグの/>の後に解析しようとする理由は、代わりにループを終了する必要があります。それを自分自身で見て、どのデバイスを取るまで、それをまったく信じてはいけませんか? –