如何找到包含另一个节点名称的节点?
例如,如果<a>
存在且<b>
包含文字“a”,那么我希望选择<b>
,但如果给定的名称不存在则不会。
<root>
<a /> <!-- Do not care what is in this for now -->
<b>a</b> <!-- Find this node only -->
<b>c</b> <!-- This node is unwanted -->
</root>
我知道我可以有效地比较name()
和text()
值,下面找到引用自身并排除其他值的节点:
*[name() = text()]
我尝试查找其他引用失败,因为此查询中的text()
位于错误的上下文中:
b[../*[name() = text()]]
如果至少有一个兄弟包含自己的名字,上面只返回所有<b>
,也许是<a>a</a>
。
我需要将节点的文本与a collection of names进行比较。我相信这应该是我要找的,但是*/name()
会抛出语法错误:
b[text() = ../*/name()]
答案 0 :(得分:0)
我不认为这在XPath 1.0中是可行的,因为XPath 1.0不提供用于定义范围变量的表达式/子句。此外,XPath 1.0不允许函数调用作为位置步骤。
XPath 2.0解决方案很简单:
b[. = ../*//name()]