【问题标题】:Xpath - How to select a node but not its child nodesXpath - 如何选择一个节点而不是它的子节点
【发布时间】:2022-08-16 04:21:19
【问题描述】:

我正在尝试选择一个节点,但没有选择它的任何子节点。

示例输入:

<Header attr1=\"Hello\"> 
  <child1> hello </child1>
  <child2>world</child2>
</Header>

预期输出:&lt;Header attr1=\"Hello\"&gt; &lt;/Header&gt;

代码:

Document xmlDoc = saxBuilder.build(inputStream);
Xpath x = XPath.newInstance(\"/Header\");
eleMyElement = x.selectSingleNode(xmlDoc);
XMLOutputter output = new XMLOutputter();
output.outputString(eleMyElement) --> this is the output

我尝试使用 /Header 作为 XPath,它为我提供了标题以及子节点。

  • XPath 选择文档中的内容。您的文档中没有没有子元素的 Header 元素。通常,XSLT 将用于从输入文档的部分构造输出文档。通过可能的更多努力,您可以使用另一个 API(例如 JDOM 提供的 API)来实现相同的结果。不过,它需要的不仅仅是 XPath。

标签: xpath jdom


【解决方案1】:

您需要区分选择的内容和显示的内容。

XPath 表达式/Header 仅选择一个节点,即Header 元素。你说“它给了我”,但“它”是什么?有些东西正在显示 XPath 选择的结果,它选择通过呈现所选元素及其所有子元素来显示结果。您需要查看显示结果的代码。

【讨论】:

  • 感谢您的评论。我添加了我使用的代码。我正在尝试更改 xpath 以找到排除子节点的方法。
  • 更改 XPath 将无济于事。 XPath 仅选择您想要的节点。您需要更改output.outputString(eleMyElement) 上的呼叫,以便它只显示您想要显示的信息。
【解决方案2】:

在这种情况下,您可以简单地做

eleMyElement.getContent().clear();

并且所有子节点都将被删除。

【讨论】:

    猜你喜欢
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多