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>

我需要解析 subcategorias 标记内的数据,因为使用我现在拥有的代码,我只能从根标记类别中获取上部标记,例如 nome 和 idcategoria。

我在 for 循环中创建了一个 NodeList,但它返回了 Document 中的所有子类别标签。而且我只需要获取唯一类别标签中的那些。这是我现在拥有的代码:

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的 Android 官方文档

您必须根据您的 XML 结构来实现您的逻辑。

于 2012-06-28T19:34:26.107 回答
1

除了 XMLPullParser,解析 XML 的另一个选择是使用Simple XML library。它将允许您轻松地将该 XML 反序列化为您可以随心所欲地操作的对象。您可以忽略类别中的所有其他子元素,而仅通过使用松散对象映射来捕获子类别。查看简单框架文档以获取更多信息。

于 2012-06-28T23:43:16.973 回答
0

@Android Coader 是对的,“你必须根据你的 XML 结构来实现你的逻辑”

为什么你有一个 KEY_ITEM,当你的 XML 中没有“项目”标签时?您需要在代码中指定要检索的标签。例如,如果您定义了一个 KEY_SUBCATEGORIA = "subcategoria",那么要获取所有子类别节点,您可以这样做

NodeList nl = doc.getElementsByTagName(KEY_SUBCATEGORIA);

然后您应该浏览每个节点,像现在一样提取名称和 ID。

于 2012-06-28T19:44:21.970 回答
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 回答