0

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

</代码>

4

1 回答 1

3

您显然缺少该current()功能

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

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

在您的情况下,当您说$table/rows/row[x=@name], then@name指的是 的@name属性row。它没有@name属性,所以谓词总是对false所有节点求值。

current()返回当前 XSLT 上下文节点以在这种情况下提供帮助。

于 2010-04-21T15:27:46.420 回答