如何编写正确XPath以识别文本出现次数满足最低要求的元素
解决方案
核心思路是通过字符串长度差统计目标字符的总出现次数,判断是否符合要求即可,对应XPath语法如下:
.//span[@id="price"][string-length(.) - string-length(translate(., '$', '')) >= 2]
语法说明
- 前半段
.//span[@id="price"]为你原本的元素定位规则,可根据实际需求调整 - 条件部分逻辑:
string-length(.):获取当前元素自身+所有后代节点的完整文本总长度translate(., '$', ''):把完整文本里所有的$字符全部删除- 两者的差值就是
$在当前元素范围内的总出现次数,判断该值大于等于2即可匹配符合要求的元素
效果验证
- 示例中的代码段1对应元素范围内共有2个
$,差值为2,符合条件会被匹配 - 代码段2对应元素范围内只有1个
$,差值为1,不符合条件不会被匹配
通用扩展
如果需要匹配任意元素(不限制是id为price的span),可改为通用写法:
.//*[string-length(.) - string-length(translate(., '$', '')) >= 2]
如果需要调整出现次数要求,直接修改条件末尾的数字即可,比如要求刚好出现3次就改为=3,要求最多出现2次就改为<=2。
内容的提问来源于stack exchange,提问作者Vance Brockberg
相关产品推荐
相关产品推荐

