我有一个如下所示的 XML。我想递归地删除相同的空标签。就像这样,一旦标签 f 被删除,标签 e 就应该被删除,而当标签 e 被删除时,标签 d 是空的,因此也应该被删除。
<Test>
<a>test</a>
<b>test</b>
<c></c>
<d>
<e>
<f> </f>
</e>
</d>
</Test>
结果应该是
<Test>
<a>test</a>
<b>test</b>
</Test>
我可以删除标签,但无法删除标签,因为它有空格。尽管我能够将其识别为要删除的标签,但是当我在其父级上调用removeChild() 时,它并没有从 XML 中删除。在调试时的代码中,调用removeChild()后显示e的子代数量为零。但它仍然保留在 xml 中?
请你帮我看看我做错了什么。
请在下面找到我正在使用的代码。
for (Element childElement : toRemove) {
Node parentNode = childElement.getParentNode();
System.out.println("Removing null or empty node :: " + childElement.getNodeName());
if(parentNode!=null){
NodeList childList = parentNode.getChildNodes();
System.out.println("List of Childer before deleting :: " + childList.getLength());
parentNode.removeChild(childElement);
clean(parentNode);
childList = parentNode.getChildNodes();
int childCount = childList.getLength();
for (int i = 0; i < childCount; i++) {
Node childNode = childList.item(i);
System.out.println("Childs :: " + childNode);
}
for (int i = 0; i < childCount; i++) {
Node childNode = childList.item(i);
if(childNode!=null){
System.out.println("Child before deleting :: " + childNode);
if (childNode instanceof Element == false){
if(childNode.getNodeValue().trim().isEmpty()){
System.out.println("found unwanted :: " + childNode.getNodeName());
parentNode.removeChild(childNode);
i--;
childCount--;
clean(parentNode);
}
}
}
}
childList = parentNode.getChildNodes();
System.out.println("List of Childer after deleting :: " + childList.getLength());
}
}
最佳答案
从您的代码中,您仅检查节点值是否为空。但如果再加上一些条件就更好了。子节点不仅可能为空,也可能为空值。
<f/>
将返回 null
因此请确保所有可能的 null、empty 和空白都能够删除子节点。
关于java : xml child not getting deleted using removeChild,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27691158/