我有这个HTML:
<div>
foo
<span>bar</span>
baz
</div>
<div>bazinga</div>
我可以使用XPath表达式//div[normalize-space(text())='foo']
来匹配<div>
节点。
但是如果我不知道foo
但我知道baz
怎么办-有没有办法可以通过第二个/第三个文本节点来匹配该节点?
答案 0 :(得分:0)
您可以索引要匹配的节点:
//div[normalize-space(text()[2])='baz']
上面的表达式匹配text()
元素的第二个div
子元素。
另一个(更具体的)变体是:
//div[normalize-space(text()[1]) = 'baz' or text()/normalize-space(following-sibling::text()) = 'baz']
这确实会检查第一个规范化的text()
值,然后检查所有同化后的兄弟姐妹中的值baz
。但这仅适用于XPath-2.0,因此我之前没有提及。
在所有三种情况下,您的示例的结果均为:
<?xml version="1.0"?>
foo
bar
baz