Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XPath匹配元素的属性和内容_Xpath_Matching - Fatal编程技术网

XPath匹配元素的属性和内容

XPath匹配元素的属性和内容,xpath,matching,Xpath,Matching,有人能帮我回答以下XPath问题吗?给定节点集: <table> <rows> <row> <value column="Product">Coal</value> <value column="Quantity">10000</value> </row> <row> <value column="Product"&g

有人能帮我回答以下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>

您显然缺少
current()
函数

$table/rows/row[value[@column='Product'] = current()/@name] $table/rows/row[value[@column='Product']=current()/@name] 在XPath谓词中(即在方括号内),上下文节点是应用谓词的节点

在您的情况下,当您说
$table/rows/row[x=@name]
时,那么
@name
指的是
行的
@name
属性。它没有
@name
属性,因此对于所有节点,谓词的计算结果始终为
false


current()。无需手动将所有角托架更换为和…哦,谢谢提示。我知道应该有一个更简单的方法:-)太好了,谢谢托马拉克。我想出了一个解决办法,首先将@name属性复制到一个变量中,但是你的更好。我认为你不需要current(),也许我错了,但是current()与“.”不一样吗?@vtd:是的,你错了。如果
current()
相同,则
current()
将不存在那么它们什么时候不相等?@vtd:在XPath谓词之外。
$table/rows/row[value[@column='Product'][text()=@name]]
$table/rows/row[value[@column='Product'] = current()/@name]