我正在尝试从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”节点。
提前致谢!
答案 0 :(得分:5)
如果在给定节点下有多个节点名称的节点,那么您的代码将无效,因为您将跳过节点。在删除节点时使用NodeList有点棘手。基本上,当您删除子节点时,如果修改NodeList,以便所有以下节点都转移回一个索引。 (类似于在使用索引迭代列表时从List中删除元素)。一个简单的解决方法是添加“--i;”删除子节点后。
答案 1 :(得分: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);
}
}