1

我需要通过 id 递归查找 xml 节点,如下所示:

<categories>
  <category id="1">
  </category>
  <category id="2">
     <category id="3"> 
     </category>
     <category id="4"> 
        <category id="5"> 
        </category> 
     </category>
  </category>
</categories>

我正在使用 DocBuilder。

我知道有 method getElementById(),但它在我的情况下不起作用,比如说,id="5"当我在根节点中时,我想找到一个带有 的元素。

可能吗 ?

4

2 回答 2

1

使用根节点调用方法:

Element element = getElementById(rootElement, "5");

以及递归方法:

public Element getElementById(Element element, String desiredId){
    if(desiredId.equals(element.getAttribute("id")))
        return element;
    for(int i=0; i < element.getChildNodes().getLength(); i++){
        Node node = element.getChildNodes().item(i);
        if (node.getNodeType() == Node.ELEMENT_NODE){
            Element child = getElementById((Element) node, desiredId);
            if(child != null)
                return child;
        }
    }
    return null;
}
于 2012-07-18T16:33:20.383 回答
0

为什么不做类似下面的伪代码

FindChild(parent, id)
{

    if(parent.getChildById(id)) return parent.getChildById(id);

    foreach(parent.child)
    {
         Element found = FindChild(child, id);
         if(found) return found;
    }

    return NULL;
}

如果具有指定 id 的元素出现在层次结构中的多个位置(即返回第一次出现或构建列表),您必须决定该怎么做

于 2012-07-18T16:23:06.687 回答