xpath选择引用的xml节点

时间:2009-10-17 14:43:11

标签: select xpath

我需要选择一个节点,其“name”属性等于当前节点的“references”属性。

<node name="foo" />
<node name="bar" references="foo" />

我找不到在XPATH中表达这种方法的方法。有任何想法吗。我尝试了以下内容:

./node[@name=@references]
./node[@name={@references}]

显然上面没有用。我猜真正的问题在括号中;如何表示哪个属性来自哪个节点?

3 个答案:

答案 0 :(得分:3)

我不完全确定这是否是你想要的。这为您提供了从任何节点到它的引用的任何节点:

//node[@name=//node/@references]

答案 1 :(得分:2)

不幸的是,纯粹的XPath无法实现您所尝试的功能。无论何时启动新谓词(括号括起的部分),上下文都会更改为启动谓词的节点。这意味着您无法直接比较单个谓词中两个单独元素的属性,而无需将其存储在变量中。

您使用的是哪种语言?您必须将第一个节点中“name”属性的值存储在变量中。

例如,在XSLT中:

<xsl:variable name="name" select="/node[1]/@name" />
<xsl:value-of select="/node[@references = $name]" />

在XQuery中

let $name := /node[1]/@name
return /node[@references = $name]

答案 2 :(得分:1)

自然解决方案:

node[@name = current()/@references]

这适用于XSLT,因为你说的是​​“当前节点”,我将其翻译为“XSLT上下文节点”。不需要额外的变量。