問題

私は次のようなXMLファイルを開くJavaアプリケーションを作成しました:

 <AnimalTree>
  <animal>
    <mammal>canine</mammal>
    <color>blue</color>
  </animal>
  <!-- ... -->
</AnimalTree>
 

私はそれを使って開くことができます:

 File fXmlFile = getResources.getXml("res/xml/data.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList animalNodes = doc.getElementsByTagName("animal");
 

次に、ノードを作成し、オブジェクトをListArrayにプッシュし、ListArrayをループするときにオブジェクトで必要なことを行うことができます。

 for (int temp = 0; temp < animalNodes.getLength(); temp++) {
Node nNode = animalNodes.item(temp);     
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
question thisAnimal = new animal();
thisAnimal.mammal = getTagValue("mammal",eElement);
// ...
 

プレーンでシンプル! Androidでのみ、 "File();"はinteger(id)ではなくStringを必要とするため、 "res/xml/data.xml"というファイルを読み取ることはできません。これは私が迷っている場所です。 "File();"をファイルを開くことができる方法はありますか、SAXparserまたはXPPを使用せずにこれは不可能ですか? (どちらも本当に理解できません。
または これらのメソッドを強制的に使用すると、誰かが私の例に似た簡単なコードを教えてもらえますか?

  ベストアンサー

リソースツリーにある場合は、IDが割り当てられ、openRawResource関数でストリームを開くことができます。

InputStream is = context.getResources().openRawResource(R.xml.data);

AndroidでXMLを操作するには、 ibm.com のこのリンクは信じられないほど徹底しています。

そのリンクの Listing 9. DOM-based implementation of feed parser を参照してください。

入力ストリーム(上記)があると、DocumentBuilderのインスタンスに渡すことができます。

 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document dom = builder.parse(this.getInputStream());
Element root = dom.getDocumentElement();
NodeList items = root.getElementsByTagName("TheTagYouWant");
 

注意してください、私はこれを個人的に行っていません - 私はIBMが提供するコードが動作すると仮定しています。

  同じタグがついた質問を見る

androidxmlfilelocalsaxparser