java xml 空节点成对_java – 以递归方式从XML中删除空节点

我想从XML元素中删除空节点.

这个xml是从供应商生成的,我没有xml生成的控制权.但由于XML几乎没有空节点,我需要递归删除这些空节点.

这个xml来自OMElement,我使用[XMLUtils] [1]从这个对象获取一个元素

示例XML

something

something

something else

由于D21是一个空节点我想删除D21,因为现在D2是一个空节点我想删除D2,但由于D有D1我不想删除D.

同样地,我有可能得到

现在因为C是空的,我想删除C然后B然后最终删除节点A.

我试图在Node中使用removeChild()方法执行此操作

但到目前为止,我无法递归删除它们.

有什么建议可以递归删除它们吗?

我递归地尝试获取节点和节点长度.但节点长度没有帮助

if(childNode.getChildNodes().getLength() == 0 ){

childNode.getParentNode().removeChild(childNode);

}

问候

Dheeraj Joshi

解决方法:

这样做,只需创建一个“深入”的递归函数,然后在“备份树”的路上删除空节点,这将同时删除D21和D2.

public static void main(String[] args) throws Exception {

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

String input = "somethingsomethingsomething else";

Document document = builder.parse(new InputSource(new StringReader(

input)));

removeNodes(document);

Transformer transformer = TransformerFactory.newInstance()

.newTransformer();

transformer.setOutputProperty(OutputKeys.INDENT, "yes");

StreamResult result = new StreamResult(new StringWriter());

transformer.transform(new DOMSource(document), result);

System.out.println(result.getWriter().toString());

}

public static void removeNodes(Node node) {

NodeList list = node.getChildNodes();

for (int i = 0; i < list.getLength(); i++) {

removeNodes(list.item(i));

}

boolean emptyElement = node.getNodeType() == Node.ELEMENT_NODE

&& node.getChildNodes().getLength() == 0;

boolean emptyText = node.getNodeType() == Node.TEXT_NODE

&& node.getNodeValue().trim().isEmpty();

if (emptyElement || emptyText) {

node.getParentNode().removeChild(node);

}

}

产量

something

something

something else

标签:java,xml,xmlnode

来源: https://codeday.me/bug/20190723/1511735.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>