XPath匹配元素的属性和内容
有人能帮我回答以下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
<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]