我需要选择一个节点,其“name”属性等于当前节点的“references”属性。
<node name="foo" />
<node name="bar" references="foo" />
我找不到在XPATH中表达这种方法的方法。有任何想法吗。我尝试了以下内容:
./node[@name=@references]
./node[@name={@references}]
显然上面没有用。我猜真正的问题在括号中;如何表示哪个属性来自哪个节点?
答案 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上下文节点”。不需要额外的变量。