XPath技术问询:如何选择节点但排除其子节点
解决XPath选择节点但排除子节点的问题
你的核心问题是:通过XPath选中<Header>节点后,该节点本身包含所有子节点,直接输出会连带子节点一起打印。要得到仅保留节点标签和属性、不含子节点的结果,需要在获取节点后清空其所有子节点,再输出。
修正后的代码实现
Document xmlDoc = saxBuilder.build(inputStream); XPath x = XPath.newInstance("/Header"); Element eleMyElement = (Element) x.selectSingleNode(xmlDoc); // 清空Header节点下的所有子节点 eleMyElement.removeContent(); XMLOutputter output = new XMLOutputter(); String result = output.outputString(eleMyElement); // 此时result即为期望的:<Header attr1="Hello"> </Header>
原理说明
- XPath的
/Header表达式确实会选中整个<Header>节点,而DOM节点本身会包含其所有子节点(元素、文本节点等),所以直接输出会连带子节点。 - 调用
Element.removeContent()方法可以移除该节点下的所有子节点和文本内容,只保留节点本身的标签和属性。
内容的提问来源于stack exchange,提问作者an125
相关产品推荐
相关产品推荐

