代码之家  ›  专栏  ›  技术社区  ›  gerrod

元素的xpath匹配属性和内容

  •  0
  • gerrod  · 技术社区  · 15 年前

    有人能帮助解决下列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]]

    </代码& GT;

    1 回复  |  直到 13 年前
        1
  •  2
  •   Tomalak    15 年前

    你显然错过了 current() 功能

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

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

    在你的情况下,当你说 $table/rows/row[x=@name] 然后 @name 指的是 @名字 属性 row . 没有 @名字 属性,因此谓词的计算结果始终为 false 对于所有节点。

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