2011-11-10 17 views
0

DOMの使用を開始したばかりで、Android XMLレイアウトファイル を解析したかった。 (唯一のEditTextののIDの上の)このようなDOMを使用してAndroid XMLレイアウトファイルを解析する

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:padding="30dip"> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:layout_gravity="center" > 


    <EditText android:id="@+id/entry1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@android:drawable/editbox_background"/> 

    <EditText android:id="@+id/entry2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@android:drawable/editbox_background"/> 


    <EditText android:id="@+id/entry3" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="@android:drawable/editbox_background"/> 

</LinearLayout> 
</LinearLayout> 

とget出力:

ID: @+id/entry1 
ID: @+id/entry2 
ID: @+id/entry3 

はこれを行う方法はありますか?誰かが私にチュートリアルを指摘したり、私にいくつかのアイデアを教えてもらえますか?

現在のコード:

final String ANDROID_ID = "android:id"; 

      try { 
       File fXmlFile = new File("res/layout/page1.xml"); 
       DocumentBuilderFactory dbFactory = DocumentBuilderFactory 
         .newInstance(); 
       DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
       Document doc = dBuilder.parse(fXmlFile); 
       doc.getDocumentElement().normalize(); 

       NodeList nList = doc.getElementsByTagName("Button"); 

       for (int temp = 0; temp < nList.getLength(); temp++) { 
        Node nNode = nList.item(temp); 
        if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
         Element eElement = (Element) nNode; 

         if (eElement.hasAttribute(ANDROID_ID)) 
          System.out.println("ID: " 
            + eElement.getAttribute(ANDROID_ID)); 
        } 
       } 
      } 

      catch (Exception e) { 
       System.out.println("Catch"); 


    e.printStackTrace(); 
     } 

ありがとう!

+0

Android内または外部のレイアウトファイルを解析しますか?外部的には、どのプラットフォーム/言語/などを使用する方が好きですか?あなたの唯一のツールがVisual Basicの場合など、Javaソリューションを提供する意味はありません。 – Dalbergia

+0

[XPath](http: //www.w3schools.com/xpath/default.asp)式。あなたのプラットフォームでXPathインタープリタが利用可能な場合(例:[Java](http://download.oracle.com/javase/1,5.0/docs/ api/javax/xml/xpath/package-summary.html))。 – JimmyB

答えて

0

あなたはJavaのDOMを使用したい場合は、(代わりにSAXを使用してのように)これを行うには、おそらくはるかに効率的な方法がありますが、この

final String ANDROID_ID = "android:id"; 

    try { 

     File fXmlFile = new File("res/layout/parse.xml"); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory 
       .newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(fXmlFile); 
     doc.getDocumentElement().normalize(); 

     NodeList nList = doc.getElementsByTagName("*"); 

     for (int temp = 0; temp < nList.getLength(); temp++) { 
      Node nNode = nList.item(temp); 
      if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
       Element eElement = (Element) nNode; 

       if (eElement.hasAttribute(ANDROID_ID)) 
        System.out.println("ID: " 
          + eElement.getAttribute(ANDROID_ID)); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

ようなものをやってみてください、それが動作します。

+0

何らかの理由でローカルドライブ上のxmlファイルにアクセスしたときにメソッドが動作しますが、res/layout/page1.xmlパスを使用しても見つからないようで、catchブロックに入ります。あなたはこれを修正する方法を知っていますか?最初の投稿に自分のコードを追加しました。 – Neeta

+0

単にそのパスを参照することはできません。代わりに 'InputStream is = getResources()。openRawResource(R.layout.page1);'を使ってみてください。 – Craigy

+0

これは、生のフォルダに入れたときに機能します。 xmlページからid属性を取得するこの方法は、バイナリでは出てこない。 – Neeta

関連する問題