Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android DOM解析器,如何获取子节点?_Android_Xml_Dom - Fatal编程技术网

Android DOM解析器,如何获取子节点?

Android DOM解析器,如何获取子节点?,android,xml,dom,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>Titl

我有以下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的子节点

当我使用

NodeList nodes = doc.getChildElements();
这似乎有效,但我不能再这样做了:

nodes.item(0).getChildElements();
如何实现仅获取节点的子菜单


谢谢

所以我终于找到了解决办法。诀窍在于使用
node.getNextSibling()

下面的代码获取所有
菜单
标记,然后读取它们的
标题
标记并将其添加到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());
                }
            }
        }
    }
}
private void divideep(整数索引)
{
currentNode=(节点)currentNodes.get(索引);
currentNodes=新的ArrayList();
valueList=新的ArrayList();
Node-childNode=currentNode.getFirstChild();
while(childNode.getNextSibling()!=null)
{
childNode=childNode.getNextSibling();
if(childNode.getNodeName().equals(“菜单”))
{
currentNodes.add(childNode);
NodeList nodes=childNode.getChildNodes();
对于(int i=0;i
可能相关:
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());
                }
            }
        }
    }
}