0

XmlPullParser.END_DOCUMENTAndroid のビルトイン 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それはデータの終わりですか、それとも単なる最終タグですか?

4

1 に答える 1

0

ルート要素の終了タグの後に空白以外の文字がある場合、ファイルは整形式の XML ではなく、パーサーはこの事実をアプリケーションに報告する必要があります。

于 2012-04-16T07:59:45.907 に答える