java – 以递归方式从XML中删除空节点
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 以递归方式从XML中删除空节点,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2255字,纯文字阅读大概需要4分钟。
内容图文
![java – 以递归方式从XML中删除空节点](/upload/InfoBanner/zyjiaocheng/752/e0d4559d98a24a1892105187a4d7f62b.jpg)
我想从XML元素中删除空节点.
这个xml是从供应商生成的,我没有xml生成的控制权.但由于XML几乎没有空节点,我需要递归删除这些空节点.
这个xml来自OMElement,我使用[XMLUtils] [1]从这个对象获取一个元素
示例XML
<A>
<B>
<C>
<C1>
<C11>something</C11>
<C12>something</C12>
</C1>
</C>
<D>
<D1>
<D11>
<D111 operation="create">
<Node>something else</Node>
</D11>
</D11>
</D1>
<D2>
<D21>
</D21>
</D2>
</D>
</B>
</A>
由于D21是一个空节点我想删除D21,因为现在D2是一个空节点我想删除D2,但由于D有D1我不想删除D.
同样地,我有可能得到
<A>
<B>
<C>
</C>
</B>
</A>
现在因为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 = "<A><B><C><C1><C11>something</C11><C12>something</C12></C1></C><D><D1><D11><D111 operation=\"create\"><Node>something else</Node></D111></D11></D1><D2><D21></D21></D2></D></B></A>";
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);
}
}
产量
<A>
<B>
<C>
<C1>
<C11>something</C11>
<C12>something</C12>
</C1>
</C>
<D>
<D1>
<D11>
<D111 operation="create">
<Node>something else</Node>
</D111>
</D11>
</D1>
</D>
</B>
</A>
内容总结
以上是互联网集市为您收集整理的java – 以递归方式从XML中删除空节点全部内容,希望文章能够帮你解决java – 以递归方式从XML中删除空节点所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。