如何通过带字符通配符的属性值使用XPath选择元素
用XPath通配符风格选择元素的方法
没问题!XPath完全支持用类似通配符的逻辑来选择元素,针对你给出的HTML结构,这里有几种靠谱的方法帮你选中那两个<a>元素:
首先先明确你的目标HTML结构:
<tr> <th class="textLeft textTop">Opgavebeskrivelse:</th> <td> <a id="m_Content_opgaverDS_abc" href="/about">click me</a> <br> <a id="m_Content_opgaverDS_123" href="/other_stuff">click me too</a><br> </td> </tr>
方法1:用starts-with()匹配开头(最适合你的场景)
因为这两个<a>的id属性都是以m_Content_opgaverDS_开头的,用starts-with()函数可以精准过滤出这类元素,XPath表达式如下:
//a[starts-with(@id, 'm_Content_opgaverDS_')]
- 解释:
//a表示选中页面中所有<a>元素,[starts-with(@id, 'xxx')]是过滤条件,只保留id属性以指定字符串开头的元素。
方法2:用contains()匹配包含指定字符串
如果你的场景是id中包含某个字符串(而非严格开头),可以用contains()函数:
//a[contains(@id, 'm_Content_opgaverDS_')]
- 注意:这个方法会选中所有
id里有m_Content_opgaverDS_的<a>,哪怕字符串在中间或末尾,你的例子里也能用,但starts-with()更精准。
方法3:用XPath 2.0+的matches()支持正则通配符
如果你的运行环境支持XPath 2.0及以上(比如现代浏览器的开发者工具、某些测试框架),可以用正则表达式来实现更灵活的匹配,比如:
//a[matches(@id, 'm_Content_opgaverDS_.+')]
- 解释:正则
m_Content_opgaverDS_.+表示匹配以m_Content_opgaverDS_开头,后面跟着任意字符(至少一个)的id,完全符合你的两个目标元素。
测试小技巧
在浏览器的开发者工具控制台里,你可以用$x()函数快速测试XPath表达式,比如输入:
$x("//a[starts-with(@id, 'm_Content_opgaverDS_')]")
就能直接看到选中的两个<a>元素啦。
内容的提问来源于stack exchange,提问作者Wiingaard
相关产品推荐
相关产品推荐

