所以,我不知道如何真正说出这个问题。我想要一个节点列表,只选择一个节点,而不是嵌套节点。例如:
<root>
<my_element>
<my_element>
Some Text
</my_element>
</my_element>
</root>
我知道我已经可以使用这个xpath完成我想要的一些事情了:
Context: /
xPath: descendant::my_element[not(ancestor::my_element)]
哪会返回此结果集:
<root>
[<my_element>]
<my_element>
Some Text
</my_element>
[</my_element>]
</root>
这就是我想要的预期行为。但我希望能够将上下文更改为:
/my_element
获得此结果集:
<root>
<my_element>
[<my_element>]
Some Text
[</my_element>]
</my_element>
</root>
我一直在努力查看xPath文档,但我还没有提出任何想法。在这里有人可以提供一些见解吗?
谢谢!
编辑 - 我希望能够选择一个my_element后代,它不是my_element的祖先,不包括上下文节点。
再次编辑 - 进一步解释。
我希望有一个xpath查询,只要节点不是my_element
的子节点,就会选择my_element
的节点。但是,如果xpath上下文设置为my_element
节点,那么我不希望该节点计入表达式。因此,xpath将匹配下一个my_element
节点,即使它实际上是my_element
的子节点。
以下是一些例子。
<root>
<a>
<a>
<b>
<a>
Hello!
</a>
</b>
<a>
<b>
Hello Again
<a>
Sub
</a>
</b>
</a>
</a>
</a>
</root>
Context: /root/
Desire: Want to grab all A nodes, so long as they aren't a descendant of A
Result:
<root> == Context
[<a>]
<a>
<b>
<a>
Hello!
</a>
</b>
<a>
<b>
Hello Again
<a>
Sub
</a>
</b>
</a>
</a>
[</a>]
</root>
Context: /root/a/
Desire: Want to grab all A nodes, so long as they aren't a descendant of A, not including the context /root/a/
Result:
<root>
<a> == Context
[<a>]
<b>
<a>
Hello!
</a>
</b>
<a>
<b>
Hello Again
<a>
Sub
</a>
</b>
</a>
[</a>]
</a>
</root>
Context: /root/a/a/
Desire: Want to grab all A nodes, so long as they aren't a descendant of A, not including the context /root/a/a/
Result:
<root>
<a>
<a> == Context
<b>
[<a>]
Hello!
[</a>]
</b>
[<a>]
<b>
Hello Again
<a>
Sub
</a>
</b>
[</a>]
</a>
</a>
</root>
Context: /root/a/a/a/
Desire: Want to grab all A nodes, so long as they aren't a descendant of A, not including the context /root/a/a/a/
Result:
<root>
<a>
<a>
<b>
<a>
Hello!
</a>
</b>
<a> == Context
<b>
Hello Again
[<a>]
Sub
[</a>]
</b>
</a>
</a>
</a>
</root>
我希望这能使我的欲望更加清晰。谢谢大家的尝试!
答案 0 :(得分:0)
使用强>:
//my_element[not(.//my_element)]
这将选择名为my_element
且没有任何my_element
后代的所有元素。
答案 1 :(得分:0)
我认为你可能会陷入一个共同陷阱。数据上的XPath表达式/ root / my_element将只选择一个元素 - 最外层的my_element节点。但是该节点仍然依附于其父母,兄弟姐妹和孩子。当您显示选择的结果时,节点通常会与其子节点(实际上是所有后代)一起显示 - 不是因为XPath选择了子节点,而是因为这是显示所选单节点的友好方式。
另一方面,我再次阅读了这个问题,我可能错了 - 我从你用来表示你的XPath表达结果的特殊符号中猜到了。
表达式/ my_element只有在其父元素是树根的文档节点时才会选择my_element,无论您的上下文节点是什么,对于您的输入都不会如此。当然,您可以将以my_element为根的子树复制到一个新文档中,在这种情况下,该表达式将起作用。