2011-02-09 2 views
0

私はここでは馬鹿だと感じています。チャプター>シーン>ダイアログで、常にトップレベルで編成されたデータセットを保存しています。 Dialogueには常にいくつかの属性があり、時には常に編成された階層に格納されている追加のデータがあります(条件のセット、またはそれぞれの属性が読み込まれる選択肢のセット)。あなた自身のアドベンチャーブックを選択し、そのルールはすべてXML文書に保存されているとします。これはそれを保存する最善の方法のように思えましたが、私は矛盾を歓迎します。Android:ドキュメント全体を解析せずにXMLから特定のノードを読み取る

私はいつも第1章の対話1から始めます。属性や条件のいずれかを使って、それぞれの対話は、常に第3章、シーン2、対話8などの新しい単一のノードに向かいます。チャプタ、シーン、またはダイアログタグを探してドキュメント全体を解析する必要はありません。しかし、私は与えられたDialogueノードを解析して、含まれている条件や選択肢のセットを調べたいと思っています。私は文書全体を毎回解析し、私のインデックスとノウハウを一致させるためにオフに反復することができながら、

XMLResourceParser parser = getResources().getXml((R.xml.script).getChild[CHAPTER][SCENE][DIALOGUE]); 

そして:私は私の人生のために、Androidのでは、と同等のものを指定する方法を見つけることができません

私はどこにいても、それはまったく嫌われているようです。何かご意見は?どこでも私は人々が文書全体を読むことを必要とする問題の解決策を探しており、答えは常にパーサーの使い方にあります。

答えて

0

あなたが探しているものが正確ではありません。 a xmlファイルを読み込み、ファイル内のいくつかのノードだけを気にしたい場合は、SAXまたはプルパーサーを使用して、関心のあるノードだけをリスンすることができます。この記事xml in Androidには両方の例があります。

ドキュメント全体を気にするだけで、ツリー内の特定の要素に移動するための簡単な方法が必要な場合は、いくつかのオプションがあります。 XMLをDOM文書(上記の記事の3番目のオプション)に解析し、getElementsByTagNameなどの関数を使用してツリーを歩くことができます。

または、XPathの使用方法を調べることができます。概要については、documentationを参照してください。

+0

私は単純に言えば、名前でノードを識別するのではなく、あたかもそれが配列であるかのように、ノードをその深さに関して番号で指定したいということです。 AS3では、XMLListと呼ばれる型があります。これは、getChildAt(index)関数を使ってこのインデックスをXMLオブジェクトとして返すので、必要なインデックス番号を知っていれば、 。 – robodevil

+0

XPathでも同様のことができるはずです。私はあなたのXML構造についてはわかりませんが、各章、シーンなどに数値属性を持たせるのは意味があります。そして、あなたは '/ chapter [@number = '3']/scene [@number = '2']/dialogue [@name = '8']'のようなことをすることができます。これは 'position()'関数でも行うことができます。 http://www.w3.org/TR/xpath/#location-pathsを参照してください。 –

+0

XPathが動作するようになっていますが、バックグラウンド関数が効果的にドキュメントを解析していて、私が求めているものを取得しているようです。私は理にかなっていると思うし、なぜ私の問題が変わったように思えるかもしれない。 私はそれを両方の方法で行う2つの機能を作って、どちらがより効率的かを試してみるつもりです。いずれにせよ、XPathは本質的に私が求めていたことを解決しました。 – robodevil

関連する問題