鉴于以下文档结构,我如何使用Xpath检查两个属性值是否匹配?
<document lang="en">
<element lang="en"></element>
<element lang="sv"></element>
<element lang="fr"></element>
</document>
我正在寻找的是:
//document[@lang="[//element[@lang]"]
答案 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
元素。