0

Java の DOM で解析された XML ファイルからノードを削除しようとしています。

private Node deleteChildNode (Node node, String nodeName )
{
    Node tempNode = null;
    NodeList nl = node.getChildNodes();
    for (int i = 0; i < nl.getLength(); i++)
    {
        tempNode = nl.item(i);
        if (tempNode.getNodeName().equals(nodeName))
        {                   
            tempNode= node.removeChild(tempNode);                   
        }        
    }
    return node;
}

呼び出し:

nodeClone = deleteChildNode(nodeClone, "L123");

しかし、ノードは削除されていません。

NodeList nl = nodeClone.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
            System.out.println(nl.item(i).getNodeName());

「L123」ノードを表示します。

前もって感謝します!

4

2 に答える 2

5

特定のノードの下にノード名を持つノードが複数ある場合、ノードをスキップするため、コードは機能しません。ノードを削除する際に NodeList を使用するのは少し注意が必要です。基本的に、子ノードを削除すると、次のすべてのノードが 1 つのインデックスに戻されるように NodeList が変更されます。(インデックスを使用してリストを反復処理しながら、リストから要素を削除するのと同様)。簡単な修正は、「--i;」を追加することです。子ノードを削除した後。

于 2012-05-06T00:34:38.000 に答える
1

このちょっとした便利なメソッドを使用して、渡されたノードの子をクリアします。

public static void clearChildNodes(Node node){
    while(node.hasChildNodes()){
        NodeList nList = node.getChildNodes();
        int index = node.getChildNodes().getLength() - 1;

        Node n = nList.item(index);
        clearChildNodes(n);
        node.removeChild(n);
    }

}
于 2013-07-24T06:23:04.797 に答える