java : xml child not getting deleted using removeChild

标签 java xml dom tags removechild

我有一个如下所示的 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/

相关文章:

xml - 为 "Periodic table"和所有链接抓取 wiki 页面

java - 因为我无法在动态大小的 Canvas 下方添加 xml 布局

java - 将架构位置添加到 JAXB 解码器

.net - Selenium 对事件使用react

Java如何在getCount()中获取PageAdapter中的上下文?

java - 如何使用集合和队列查找图的可达性

javascript - 将 DOM 节点链接到(浏览器内)域对象 : is direct reference OK? 的选项

javascript - 基于另一个下拉列表-javascript的动态文本框和下拉列表

java - 如何在 Linux 中删除/tmp/.java_pid<number> 文件?

java - 即使已处理,ArrayList IndexOutOfBoundsException