XPath匹配属性和元素的内容

时间:2010-04-21 13:31:24

标签: xpath matching

任何人都可以帮助解决以下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;

1 个答案:

答案 0 :(得分:2)

您显然错过了current()功能

$table/rows/row[value[@column='Product'] = current()/@name]

在XPath谓词中(即在方括号内),上下文节点是谓词应用于的节点。

在您的情况下,当您说$table/rows/row[x=@name]时,@name会引用@name的{​​{1}}属性。其中没有row属性,因此对于所有节点,谓词始终评估为@name

false返回当前的XSLT上下文节点,以帮助完全符合这种情况。