xml解析并在列表视图中显示数据

时间:2013-12-09 06:43:24

标签: android xml xml-parsing

我有一个像[this] [1]这样的xml文件,我需要根据"edition name"

获取所有"group name"

我必须创建一个组名列表,并在单击组名时显示版本名称列表。 OutPut:

enter image description here

点击目录:

enter image description here

这个xml以不同的语言出现,有没有办法在不与组名比较的情况下获取所有版本的名称。

目前我正在使用type标签来获取所有目录 :

if(parser.getValue(ele2, "type").toString().equalsIgnoreCase("catalog"))

magazines类型中也存在一些catalogs。所以没有得到正确的结果 ..

如何获取editions name group name catalogs所有final String URL = "http://xml/web/?frg="+lang+"&user="+count+"_"+user; System.out.println("URL child : " + URL); parser = new XMLParser(); String xml = parser.getXmlFromUrl(URL); // getting XML from URL doc = parser.getDomElement(xml); // getting DOM element NodeList n1 = doc.getElementsByTagName("groups"); for (int i = 0; i < 1; i++) { //ToDo : worked temp Element e = (Element) n1.item(0); NodeList children = e.getChildNodes(); if(item_name.equalsIgnoreCase("Catalogs")||item_name.equalsIgnoreCase("Kataloge")) // there could be other languages { NodeList nodeList2 = doc.getElementsByTagName("edition"); for (int k = 0; k < nodeList2.getLength(); k++) { HashMap<String, String> map = new HashMap<String, String>(); Element ele2 = (Element) nodeList2.item(k); if(parser.getValue(ele2, "type").toString().equalsIgnoreCase("catalog")) { System.out.println(""+parser.getValue(ele2, "name").toString()); System.out.println(""+parser.getValue(ele2, "cat_url").toString()); map.put(ss2, parser.getValue(ele2,ss2 )); map.put(KEY_THUMB_URL, parser.getValue(ele2, KEY_THUMB_URL)); map.put(CAT_URL, parser.getValue(ele2,"cat_url")); // adding HashList to ArrayList songsList.add(map); } } } if(item_name.equalsIgnoreCase("Magazines")||item_name.equalsIgnoreCase("Magazine")) { NodeList nodeList2 = doc.getElementsByTagName("edition"); for (int k = 0; k < nodeList2.getLength(); k++) { HashMap<String, String> map = new HashMap<String, String>(); Element ele2 = (Element) nodeList2.item(k); if(parser.getValue(ele2, "type").toString().equalsIgnoreCase("pdf")) { System.out.println(""+parser.getValue(ele2, "name").toString()); System.out.println(""+parser.getValue(ele2, "cat_url").toString()); map.put(ss2, parser.getValue(ele2,ss2 )); map.put(KEY_THUMB_URL, parser.getValue(ele2, KEY_THUMB_URL)); map.put(CAT_URL, parser.getValue(ele2,"cat_url")); // adding HashList to ArrayList songsList.add(map); } } } if(item_name.equalsIgnoreCase("Instructions")) { NodeList n2 = doc.getElementsByTagName("groups"); for (int i1 = 0; i1 < 1; i1++) { //ToDo : worked temp Element e1 = (Element) n2.item(0); NodeList children1 = e1.getChildNodes(); for (int j = 0; j <children1.getLength(); j++) { HashMap<String, String> map = new HashMap<String, String>(); child = children1.item(j); // System.out.println("name node22 inside " + parser.getValue((Element)child, "name")); if(parser.getValue((Element)child, "name").equals("Instructions")) { if (child.getNodeName().equalsIgnoreCase("group")) { NodeList nl2 = child.getChildNodes(); System.out.println("Nodelist lenght : " + nl2.getLength()); for (int jj = 0; jj <nl2.getLength(); jj++) { Node nn =nl2.item(jj); System.out.println("name node22 inside " + parser.getValue((Element)nn, "name")); } // map.put(KEY_TITLE, parser.getValue((Element)child,KEY_TITLE )); //map.put(KEY_THUMB_URL, parser.getValue((Element)child, KEY_THUMB_URL)); // adding HashList to ArrayList //songsList.add(map); } } } } } 等等...

或者更好的方法..我不确定我使用的代码是一个好方法。 请建议。

我的代码:

Element e = (Element) n1.item(0);
NodeList nodeList2 = doc.getElementsByTagName("edition");

解决: 改变了这个:

Element e = (Element) n1.item(0);
NodeList nodeList2 = e.getElementsByTagName("edition");

到此:

{{1}}

1 个答案:

答案 0 :(得分:0)

我建议您使用模式匹配方法构建自己的解析器。因为它可以让您根据需要定制东西。 Gson就像解析器一样合适。