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 有点棘手。基本上,当您删除子节点时,如果修改 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 回答