使用Xpath比较属性值

时间:2014-09-18 13:45:14

标签: xpath

鉴于以下文档结构,我如何使用Xpath检查两个属性值是否匹配?

<document lang="en">
<element lang="en"></element>
<element lang="sv"></element>
<element lang="fr"></element>
</document>

我正在寻找的是:

//document[@lang="[//element[@lang]"]

4 个答案:

答案 0 :(得分:5)

这将返回<document>属性值匹配任何子节点lang的{​​{1}}属性的所有<element>个节点:

lang

答案 1 :(得分:1)

具体到您的示例,您可以使用:

//document[@lang=child::element/@lang]

如果您只是检查是否存在匹配,可以将其包装在boolean

boolean(//document[@lang=child::element/@lang])

如果您想选择匹配的元素,可以ancestor

进行检查
//element[@lang=ancestor::document[1]/@lang]

如果要匹配其他位置具有匹配属性的节点,可以执行以下操作:

//node()[@lang=following::node()/@lang]

这应匹配文档中其他位置匹配的第一个节点。

答案 2 :(得分:0)

此示例应该有效:

//document/@lang[. = //element/@lang]

答案 3 :(得分:0)

XPath是查询语言。它的主要用途是找到 XML节点,而不是&#34;检查&#34;如果这样和这样的条件是真的。

这样的任务更适合嵌入XPath的宿主语言,例如XSLT。在XSLT中,有一个xsl:if元素。

例如,写一个像

这样的模板
<xsl:template match="/document">
  <xsl:if test="@lang = element/@lang">
    <true/>
  </xsl:if>
</xsl:template>

如果document元素的属性值与<true/>的值相同,则上面的模板与element匹配并返回document/@lang元素。