1

AndroidのSAXパーサーを使用して非常に単純なXMLスキーマを解析しています。

サンプルファイルは次のようになります

<Lists>
<List name="foo">
<Note title="note 1" .../>
<Note title="note 2" .../>
</List>
<List name="bar">
<Note title="note 3" .../>
</List>
</Lists>

...は、質問するのに重要ではない属性として、より多くのノートデータを表します。

SAXパーサーを使用してドキュメントを解析しstartElement、HandlerBaseのメソッドと'endElement'メソッドのみを実装してNoteノードとListノードを処理します。

ただし、場合によっては、ファイルが非常に大きくなり、処理に時間がかかることがあります。いつでも解析プロセスを中止できるようにしたい(つまり、ユーザーがキャンセルボタンを押した)。

私が思いついた最善の方法は、特定の条件が満たされたとき(つまりboolean stopParsing、trueのとき)にstartElementメソッドから例外をスローすることです。

これを行うためのより良い方法はありますか?

私はいつもDOMスタイルのパーサーを使用していたので、SAXパーサーを完全には理解していません。

最後に、これをAndroidで実行しているので、UIの応答性を維持するために、パーサーをワーカースレッドで実行します。パーサーの実行中にスレッドを安全に強制終了する方法を知っている場合は、それも私の質問に答えます。

4

1 に答える 1

2

次のメソッドを呼び出さないだけで簡単に実行できるため、XMLPullParserを調べることをお勧めします。解析をより細かく制御できます。

XmlPullParser xpp=getResources().getXml(R.xml.lists);
while (xpp.getEventType()!=XmlPullParser.END_DOCUMENT) {
    if (xpp.getEventType()==XmlPullParser.START_TAG) {
        if (xpp.getName().equals("list")) {
            items.add(xpp.getAttributeValue(0));
        }
    }

    xpp.next();
}
于 2010-04-05T18:58:29.517 に答える