JAVA XML,递归查找

时间:2012-07-18 16:06:36

标签: java xml

我需要通过id递归地找到xml Node,如下所示:

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

我正在使用DocBuilder。

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

有可能吗?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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的元素出现在层次结构中的多个位置(即返回第一次出现或构建列表),则必须决定该怎么做