我有一棵类似的树:
tr
_|_
td td
_| |_
div div
_| |_
input "foobar"
我使用:
选择节点“foobar”//*[normalize-space(text())='foobar']
但我无法选择曾祖父母tr
,并选择了曾祖父input
。有什么建议吗?
答案 0 :(得分:2)
我选择了节点“foobar” 使用:
//*[normalize-space(text())='foobar']
但我无法选择伟大的 祖父母和选择伟大的盛大 孩子“foobar”与它。
我想你要从顶部元素tr
开始选择其字符串值(标准化后)为“foobar”的元素。
这是一个从顶层elemet tr
“启动”并选择所需元素的XPath表达式:
/tr//*[normalize-space()='foobar']
如果您需要选择文本节点本身(而不是其元素父节点):
/tr//text()[normalize-space()='foobar']
如果您想避免对//
缩写进行昂贵且缓慢的评估(因为您知道文档结构),请使用以下表达式:
/tr/td/div[normalize-space()='foobar']
甚至:
/tr/td[2]/div
<强>更新强>:
现在,OP改变了他的问题,并希望从input
中选择div
元素,该元素具有规范化的字符串值'foobar'。
这是一个XPath表达式,正好选择:
../..//input
或
../../td[1]/div/input
请注意:如果这些表达式没有选择任何节点,则很可能该文档具有默认命名空间 - 搜索XPath默认命名空间 - 有很多很好的答案这个问题 - 在SO和互联网上。
答案 1 :(得分:0)
在空格规范化后,此XPath表达式选择元素 后代文本节点等于“foobar”:
//*[.//text()[normalize-space()='foobar']]