【发布时间】:2023-04-09 02:32:02
【问题描述】:
我有一个如下所示的 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());
}
}
【问题讨论】:
-
如果标签之间没有间隙,而不是
,如果标签像 ,那就是中间没有那个空格。它能够删除标签。我什至尝试在删除之前将节点的值设置为 null 或空白,但这也不起作用。请帮忙!!!!!!
标签: java xml dom tags removechild