6

こんにちは、XML 内のすべてのタグのリストを取得したいと考えています。一部のタグが特定の属性を持っている場合は、その属性の値も必要です。たとえば、ここに 1 つの特定の例があります。

<?xml version="1.0" encoding="utf-8"?>
<bbc.mobile.news.view.AVGalleryView android:background="@drawable/gallery_item_selector" android:padding="2.0dip" android:focusable="true" android:layout_width="139.0dip" android:layout_height="130.0dip"
  xmlns:android="http://schemas.android.com/apk/res/android">
    <bbc.mobile.news.view.NewsImageView android:id="@id/galleryItemView" android:background="#00000000" android:padding="0.0dip" android:layout_width="@dimen/thumbnail_width" android:layout_height="@dimen/thumbnail_height" />
    <TextView android:textSize="13.0sp" android:textColor="@color/thumbnail_text" android:ellipsize="end" android:id="@id/articleTitleId" android:background="@color/thumbnail_text_bg" android:paddingLeft="5.0dip" android:paddingTop="2.0dip" android:paddingBottom="5.0dip" android:layout_width="139.0dip" android:layout_height="50.0dip" android:maxLines="2" android:layout_below="@id/galleryItemView" />
    <ImageView android:layout_gravity="center_vertical" android:id="@id/avIconView" android:background="#99000000" android:duplicateParentState="true" android:layout_width="40.0dip" android:layout_height="40.0dip" android:src="@drawable/icon_playvideo_selected" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" />
</bbc.mobile.news.view.AVGalleryView>

親子関係には興味がなく、親子関係があれば最深部の子までイテレートしたい。また、特定の要素に存在する場合は、android:idおよびandroid:name属性値も必要です。

問題は、親子関係がどの程度深いのか、また xml 内のどこにあるのかがわからないことです。また、以前はタグ名も知りませんでした。コードで再帰を使用することを考えることができますが、もっと簡単な解決策があると思います

4

2 に答える 2

16

私は解決策を見つけました、それは非常に簡単でした、それがそれをする前に知りませんでしgetElementsByTagName("*")た、ここに私のコードがあります、

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(file);
    doc.getDocumentElement().normalize();
    System.out.println("Root element " + doc.getDocumentElement().getNodeName());

    NodeList nodeList=doc.getElementsByTagName("*");
    for (int i=0; i<nodeList.getLength(); i++) 
    {
        // Get element
        Element element = (Element)nodeList.item(i);
        System.out.println(element.getNodeName());
    }

ここで解決策を見つけました

于 2012-10-11T03:21:11.510 に答える