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 に答える