我有一个类似的树的一个:使用节点选择祖父母选择它的后代
tr
_|_
td td
_| |_
div div
_| |_
input "foobar"
我有节点“foobar的”选中的使用:
//*[normalize-space(text())='foobar']
但我我无法选择曾祖父母tr
并选择了很大的孩子input
有任何建议吗?
我有一个类似的树的一个:使用节点选择祖父母选择它的后代
tr
_|_
td td
_| |_
div div
_| |_
input "foobar"
我有节点“foobar的”选中的使用:
//*[normalize-space(text())='foobar']
但我我无法选择曾祖父母tr
并选择了很大的孩子input
有任何建议吗?
我有节点“foobar的”选中 使用:
//*[normalize-space(text())='foobar']
但我无法选择伟大的 祖父母tr和选择伟大的 孩子“foobar”与它。
我想你想要选择其字符串值(标准化后)为“foobar”的元素,从顶部元素tr
开始。
这里是一个XPath表达式从顶部elemet tr
“开始”,并选择想要的元素:
/tr//*[normalize-space()='foobar']
如果您需要选择文本节点本身(而不是其元素的父):
/tr//text()[normalize-space()='foobar']
如果你想避免//
缩写的昂贵和缓慢的评价(因为你知道文档结构),用这句话:
/tr/td/div[normalize-space()='foobar']
甚至:
/tr/td[2]/div
更新:
现在OP改变了他的问题,并希望从已标准化的字符串值 'foobar' 命令的div
选择input
元素。
这里是一个XPath表达式恰好选择这个:
../..//input
或
../../td[1]/div/input
请注意:如果这些表达式没有选择任何节点,它是最有可能该文档有一个默认的命名空间 - 搜索XPath默认命名空间 - 这个问题有很多很好的答案 - 在SO和互联网上。
这个XPath表达式每选择一个元件具有空白正常化后后代文本节点等于 “foobar的”:
//*[.//text()[normalize-space()='foobar']]
好问题,+1。查看我的答案,了解可以使用的详尽XPath表达式集。 :) – 2011-04-13 04:35:19
准确地说,我正在寻找。 +1。 – anujin 2013-10-11 08:09:00