任何人都可以帮助解决以下XPath问题吗?给定节点集:
<table>
<rows>
<row>
<value column="Product">Coal</value>
<value column="Quantity">10000</value>
</row>
<row>
<value column="Product">Iron</value>
<value column="Quantity">5000</value>
</row>
<row>
<value column="Product">Ore</value>
<value column="Quantity">4000</value>
</row>
</rows>
</table>
我想查询以查找具有给定产品名称的节点子集。注意,产品名称由正在处理的当前节点的属性(即“@name”)提供。所以,当@name属性的值为“Coal”时,我希望这会返回:
<row>
<value column="Product">Coal</value>
<value column="Quantity">10000</value>
</row>
这就是我想出来的;我知道这是错的,因为我没有得到任何回报。
$table/rows/row[value[@column='Product'][text()=@name]]
&LT; /代码&GT;
答案 0 :(得分:2)
您显然错过了current()
功能
$table/rows/row[value[@column='Product'] = current()/@name]
在XPath谓词中(即在方括号内),上下文节点是谓词应用于的节点。
在您的情况下,当您说$table/rows/row[x=@name]
时,@name
会引用@name
的{{1}}属性。其中没有row
属性,因此对于所有节点,谓词始终评估为@name
。
false
返回当前的XSLT上下文节点,以帮助完全符合这种情况。