我需要解析从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>
我需要解析子类别中的数据 标签,因为我现在的代码,我只得到上面的标签,像 来自root tag categoria的nome和idcategoria。
我在for循环中创建了一个NodeList,但它返回了Document中的所有subcategoria标签。而且我只需要获得一个独特的categoria标签内的那些。 这是我现在的代码:
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);
}
有人可以帮我解决这个问题吗?
提前致谢!
答案 0 :(得分:1)
请看一下描述 XMLPullParser 的official document of Android。
您必须根据XML结构实现逻辑。
答案 1 :(得分:1)
除了XMLPullParser之外,解析XML的另一个选择是使用Simple XML library。它允许您轻松地将XML反序列化为一个对象,您可以根据需要进行操作。您可以忽略categoria中的所有其他子元素,并通过使用松散对象映射捕获子类别。有关更多信息,请查看Simple Framework文档。
答案 2 :(得分:0)
答案 3 :(得分: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);