一个XPath表达式是否可以使用元素中的文本匹配所有以下<a>
元素,在本例中为"Link"
?
示例:
<a href="blah">Link</a>
<a href="blah"><span>Link</span></a>
<a href="blah"><div>Link</div></a>
<a href="blah"><div><span>Link</span></div></a>
答案 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>
,这可能是也可能不合适。