0

http リクエストから取得した XML の特定の部分を解析する必要がありますが、その方法がわかりません。

次の XML 構造が返されます。

<categorias type="array">
    <categoria>
        <nome>
        Alimentação
        </nome>
        <idcategoria>
        5
        </idcategoria>
        <subcategorias>
            <subcategoria>
                <nome>
                Todos
                </nome>
                <id>
                5
                </id>
            </subcategoria>
        </subcategorias>
    </categoria>
</categorias>

サブカテゴリ タグ内のデータを解析する必要があるのは、現在のコードでは、ルート タグ カテゴリから nome や idcategoria などの上位タグのみを取得するためです。

for ループ内に NodeList を作成しましたが、ドキュメント内のすべてのサブカテゴリ タグが返されます。そして、一意のカテゴリ タグ内のものだけを取得する必要があります。これが私が今持っているコードです:

menuItems = new ArrayList<HashMap<String, String>>();

    XMLParser parser = new XMLParser();
    String xml = parser.getXmlFromUrl(URL); // getting XML
    Document doc = parser.getDomElement(xml); // getting DOM element

    NodeList nl = doc.getElementsByTagName(KEY_ITEM);

    // looping through all item nodes <item>
    for (int i = 0; i < nl.getLength(); i++) {
        // creating new HashMap
        HashMap<String, String> map = new HashMap<String, String>();
        Element e = (Element) nl.item(i);
        // adding each child node to HashMap key => value
        map.put(KEY_ID, parser.getValue(e, KEY_ID));
        map.put(KEY_NAME, parser.getValue(e, KEY_NAME));

        // adding HashList to ArrayList
        menuItems.add(map);
    }

誰かがこれについて私を助けることができます!?

前もって感謝します!

4

4 に答える 4

1

XMLPullParser 以外に、XML を解析するためのもう 1 つのオプションは、Simple XML ライブラリを使用することです。その XML を簡単に逆シリアル化して、必要に応じて操作できるオブジェクトにすることができます。緩やかなオブジェクト マッピングを使用して、カテゴリ内の他のすべての子要素を無視し、サブカテゴリのみをキャプチャすることができます。詳細については、単純なフレームワークのドキュメントを確認してください。

于 2012-06-28T23:43:16.973 に答える
1

XMLPullParserについて説明している Android の公式ドキュメントをご覧ください

XML 構造に従ってロジックを実装する必要があります。

于 2012-06-28T19:34:26.107 に答える
0

わかった!以前と同じ種類の構造だけを使用しました!

私が持っていたforループ内にこのコードを追加しました:

NodeList nlSubcategorias = e.getElementsByTagName("subcategoria");
        ArrayList<HashMap<String, String>> subcategorias = new ArrayList<HashMap<String, String>>();

        for (int j = 0; j < nlSubcategorias.getLength(); j++) {
            HashMap<String, String> mapSub = new HashMap<String, String>();

            Element eSub = (Element)nlSubcategorias.item(j);

            mapSub.put(KEY_ID_SUB, parser.getValue(eSub, KEY_ID_SUB));
            mapSub.put(KEY_NAME_SUB, parser.getValue(eSub, KEY_NAME_SUB));

            subcategorias.add(mapSub);

            System.out.println("subcategorias: " + subcategorias.get(j).get(KEY_NAME_SUB));
        }
        subcategoriasItems.add(subcategorias);
于 2012-06-29T17:20:23.070 に答える
0

@Androidコーダーは正しい、「XML構造に従ってロジックを実装する必要があります」

XML に「item」タグがないのに、なぜ KEY_ITEM があるのですか? 取得するタグをコードで指定する必要があります。たとえば、KEY_SUBCATEGORIA = "subcategoria" を定義した場合、すべてのサブカテゴリ ノードを取得するには、次のようにします。

NodeList nl = doc.getElementsByTagName(KEY_SUBCATEGORIA);

次に、各ノードをナビゲートして、現在行っているように名前と ID を取得する必要があります。

于 2012-06-28T19:44:21.970 に答える