【问题标题】:java : xml child not getting deleted using removeChildjava : xml子没有被removeChild删除
【发布时间】: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


【解决方案1】:

从您的代码中,您只检查节点值是否为空。但最好多加一些条件。子节点可能不仅是空的,也可能是空值。 &lt;f/&gt; 将返回 null

因此请确保所有可能的 null、empty 和 whitespace 都可以删除子节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-11
    • 2019-03-30
    • 2011-08-28
    • 2021-05-15
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多