查找文本值与另一个节点匹配的节点

时间:2012-12-30 19:41:35

标签: xpath

如何找到包含另一个节点名称的节点?

例如,如果<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()]

1 个答案:

答案 0 :(得分:0)

我不认为这在XPath 1.0中是可行的,因为XPath 1.0不提供用于定义范围变量的表达式/子句。此外,XPath 1.0不允许函数调用作为位置步骤。

XPath 2.0解决方案很简单

b[. = ../*//name()]