我正在开发XML编辑器,当用户单击类型上的删除时,应用程序将删除整个类型。 但它不是唯一删除内容而是留下标签。
<type>
<OBJECT_TYPE/>
<prop/>
<param/>
<param/>
<param/>
<param/>
<param/>
<param/>
<param/>
<param/>
<param/>
<param/>
<param/>
<param/>
<param/>
<param/>
</type>
<type>
<OBJECT_TYPE/>
<prop/>
<param/>
<param/>
<param/>
</type>
<type>
<OBJECT_TYPE/>
<prop/>
<param/>
<param/>
</type>
所以基本上所有的数据都消失了,但它留下了这个标签,我也想要将它们删除。 怎么做?
我的代码:
NodeList type = (NodeList) doc.getElementsByTagName("type").item(x);
System.out.println("type : " + type);
for (int i = 0; i < type.getLength(); i++) {
Node curNode = (Node) type.item(i);
System.out.println(" Node name : " + curNode.getChildNodes());
removeChilds(curNode);
}
// Save the new update
save(doc);
public static void removeChilds(Node node) {
while (node.hasChildNodes())
node.removeChild(node.getFirstChild());
}
答案 0 :(得分:1)
我认为你做错了DOM树导航。 item
已经为Node
标记返回了<type>
。你只需删除它:
Node type = doc.getElementsByTagName("type").item(x);
type.getParentNode().removeChild(type);
你在代码中做了什么 - 你将Node
转换为NodeList
(xml元素也是子节点列表),所以你的for
循环迭代<type>
的子节点{1}}。然后在每个孩子中(例如您的示例中的prop
和param
),您再次迭代孩子并删除其中的每个孩子。所以你永远不会删除type
节点。