使用DOM Parser从url解析XML数据

时间:2012-11-09 12:40:20

标签: android xml xml-parsing android-xml domparser

我想从url解析xml文件:

http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=cher&api_key=5d6ce941674603e4bb75cfad6cfa13b7

我想解析文件的以下标记:

<artist>
<name>Cher</name>
<image size="medium">http://userserve-ak.last.fm/serve/64/62286415.png</image>
</artist>

但我不知道如何只获得这两个标签的价值。

我尝试过的示例代码 http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/

但它没有显示解析具有不同属性值的相同标签。 任何人都可以指导我如何做到这一点吗?

提前完成。

2 个答案:

答案 0 :(得分:2)

从您提供的链接中,我只提取了一小部分:

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

    NodeList nl = doc.getElementsByTagName("artist");
    // looping through all item nodes <artist>
    for (int i = 0; i < nl.getLength(); i++) {
       Element e = (Element) nl.item(i);
       String name = parser.getValue(e, "name"));
       String image = parser.getValue(e, "image")); 

       //if you want the artist 'Cher' sigh ;)
       if (name.equals("Cher")){
          //do whatever you want
       }
    }

答案 1 :(得分:1)

Thankx。我从这个网址解决了我的问题:

Getting element using attribute

if(str.equals("image"))
         {
             n = item.getElementsByTagName(str);

             for (int i = 0; i < n.getLength(); i++) {
                    Node subNode = n.item(i);

                    if (subNode.hasAttributes()) {
                        NamedNodeMap nnm = subNode.getAttributes();

                        for (int j = 0; j < nnm.getLength(); j++) {
                            Node attrNode = nnm.item(j);

                            if (attrNode.getNodeType() == Node.ATTRIBUTE_NODE) {
                                Attr attribute = (Attr) attrNode;

                               if( attribute.getValue().equals("medium"))
                               {
                                   return this.getElementValue(n.item(i));
                               }
                            }
                        }               
                    }
                }

         }