XPath:在任意数量的嵌套元素中匹配文本的方法?

时间:2016-02-10 19:48:13

标签: html xml xpath

一个XPath表达式是否可以使用元素中的文本匹配所有以下<a>元素,在本例中为"Link"

示例:

  1. <a href="blah">Link</a>
  2. <a href="blah"><span>Link</span></a>
  3. <a href="blah"><div>Link</div></a>
  4. <a href="blah"><div><span>Link</span></div></a>

2 个答案:

答案 0 :(得分:3)

您可以使用以下内容:

//a[(.//*|.)[contains(text(), "Link")]]

这将选择包含文本“Link”或a元素的a元素,这些元素具有包含文本“Link”的后代元素。

  • //a - 选择所有a元素
  • ( - 打开或分组
  • .//*选择所有后代节点
  • | - 或..
  • . - 选择当前节点
  • ) - 关闭或分组
  • [contains(text(), "Link")] - 如果它们包含“Link”文字

或者,您也可以使用:

//a[(.//*|.)[.="Link"]]

答案 1 :(得分:3)

这个简单的XPath表达式,

//a[contains(., 'Link')]

将选择所有示例中的a元素,因为.表示当前节点(a),contains()将检查string value a以查看它是否包含'Link'a的字符串值已经方便地从任何后代元素中抽象出来。

这个更简单的XPath表达式,

//a[. = 'Link']

还会在所有示例中选择a元素。如果a的字符串值完全相等而不是仅包含"Link",则使用它是合适的。

注意:上述表达式也会选择<a href="blah">Li<br/>nk</a>,这可能是也可能不合适。