如何用简洁XPath选择含特定class的div?兼容多版本与主流浏览器
选择包含指定class的div元素的XPath方案
XPath 1.0(主流浏览器Document.evaluate()兼容版本)
XPath 1.0没有原生的class匹配函数,要准确匹配aaa这个独立class(避免aaabbb这类部分匹配的情况),最简洁的准确方案是:
//div[contains(concat(' ', normalize-space(@class), ' '), ' aaa ')]
对比你给出的复杂方案,只是把双引号换成了单引号(无需转义,更简洁),核心逻辑没变:通过normalize-space()处理class里的多余空格(比如连续空格、首尾空格),再用concat()给处理后的class前后加空格,确保aaa是独立的单词,最后用contains()完成匹配。
如果能确保class属性里只有单个空格分隔、无多余空白字符,还可以再简化一点(但兼容性会稍差):
//div[contains(concat(' ', @class, ' '), ' aaa ')]
更高版本XPath(2.0+)
从XPath 2.0开始,有了更直观简洁的写法:
用
tokenize()分割class属性,判断序列中是否包含目标值://div[tokenize(@class, '\s+') = 'aaa']tokenize(@class, '\s+')会把class按任意数量的空白字符分割成字符串序列,再判断这个序列里是否存在等于aaa的项。XPath 3.1及以上还提供了专门的
contains-token()函数,写法更直接://div[contains-token(@class, 'aaa')]这个函数直接判断目标字符串是否包含指定的token(按空白字符分隔),不需要手动处理分割和匹配逻辑。
内容的提问来源于stack exchange,提问作者Dr. Gut
相关产品推荐
相关产品推荐

