10

プル パーサーを使用してアセット フォルダー内のローカル XML ファイルを解析するにはどうすればよいですか? プル パーサーを動作させることができません。常に io 例外をスローします。ファイルへのパスを取得できないか、ファイルに接続できないと思います。

4

1 に答える 1

23

ミックス、

「assets」と「res」の両方からローカルファイルをロードするさまざまな方法をいじっていましたが、尋ねられたとおりに質問に答えるために(他の誰も持っていないようです):

まず、テストの前に XML が有効であることを確認するか、検証をオフにします。これを行うと同時にプル パーサーをインスタンス化する方法は次のとおりです。

    try {
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setValidating(false);
        XmlPullParser myxml = factory.newPullParser();

次に、xml ファイルを開き、プル パーサーへの入力として設定します。

        InputStream raw = getApplicationContext().getAssets().open("simple.xml");
        myxml.setInput(raw, null);

次に、プル ループをセットアップします (またはその他、遅延プルを行うかどうかによって異なります。これは設計上の決定です。

        int eventType = myxml.getEventType();
        while(eventType != XmlPullParser.END_DOCUMENT) {
            if(eventType == XmlPullParser.START_DOCUMENT) {

                Log.d(MY_DEBUG_TAG, "In start document");
            }
            else if(eventType == XmlPullParser.START_TAG) {
                Log.d(MY_DEBUG_TAG, "In start tag = "+myxml.getName());
            }
            else if(eventType == XmlPullParser.END_TAG) {
                Log.d(MY_DEBUG_TAG, "In end tag = "+myxml.getName());

            }
            else if(eventType == XmlPullParser.TEXT) {
                Log.d(MY_DEBUG_TAG, "Have text = "+myxml.getText());
            }
            eventType = myxml.next();
        }
    } catch (XmlPullParserException e) {

に注意してくださいmyxml.getEventType()。解析を開始し、プルしているタイプのイベントを処理するには、これを行う必要があります。注: 読みやすくするために、catch ブロックは省略されています。

上記を 2.1 でテストしました。役立つことを願っています -Frank

于 2011-01-14T10:39:22.783 に答える