如何使用XPath匹配第二个/更多文本节点

时间:2019-02-25 23:12:27

标签: html xml xpath

我有这个HTML:

<div>
  foo
  <span>bar</span>
  baz
</div>
<div>bazinga</div>

我可以使用XPath表达式//div[normalize-space(text())='foo']来匹配<div>节点。

但是如果我不知道foo但我知道baz怎么办-有没有办法可以通过第二个/第三个文本节点来匹配该节点?

1 个答案:

答案 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