Android DOM Parser,如何获取子节点?

时间:2015-08-26 09:04:32

标签: android xml dom

我有以下XML结构

<urlset><!--  lib.meine_sitemap [begin] -->
    <menu level="1">
         <title>Products</title>
         <url>index.php?id=395</url>
         <menu level="2">
              <title>Title</title>
              <url>index.php?id=426</url>
              <menu level="3">
                  <title>Title</title>         
                  <url>index.php?id=437</url>
                  <cat>41</cat>
                  <cat>42</cat>
              </menu>
              <menu level="3">
                  <title>Title</title>                        
                  <url>index.php?id=436</url>
                  <cat>80</cat>
              </menu> 
         </menu> 
    </menu>
(...)
</urlset>

现在我想获得“菜单级别1”的所有子节点。在列表视图中显示标题。当我使用时:

DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(response));
Document doc = dBuilder.parse(is);
NodeList nodes = doc.getElementsByTagName("menu");

我获得所有元素而不仅仅是菜单级别1的子节点。

当我使用时

NodeList nodes = doc.getChildElements();

这似乎有效,但后来我再也不能这样做了:

nodes.item(0).getChildElements();

我怎样才能实现我只获得节点的子菜单?

谢谢!

1 个答案:

答案 0 :(得分:0)

所以最后我得到了一个解决方案。诀窍是使用node.getNextSibling()

以下代码获取所有menu标记,然后阅读它们的title标记并将其添加到Arraylist。

private void diveDeep(int index)
{
    currentNode = (Node)currentNodes.get(index);

    currentNodes = new ArrayList<Node>();
    valueList = new ArrayList<String>();

    Node childNode = currentNode.getFirstChild();

    while(childNode.getNextSibling() != null)
    {
        childNode = childNode.getNextSibling();
        if(childNode.getNodeName().equals("menu"))
        {
            currentNodes.add(childNode);
            NodeList nodes = childNode.getChildNodes();

            for(int i = 0; i < nodes.getLength(); i++)
            {
                if(nodes.item(i).getNodeName().equals("title"))
                {
                    valueList.add(nodes.item(i).getTextContent());
                }
            }
        }
    }
}