XPath多contains条件过滤:是否存在更简洁高效的写法?
XPath多关键词匹配的简化写法
你当前使用的and (contains(BusinessType,'Restaurant') or contains(BusinessType,'Pub') or contains(BusinessType,'Takeaway'))能正常返回结果,但可以根据你所用的XPath版本做更简洁的优化:
1. XPath 2.0及以上版本(支持场景:Selenium 4+、XQuery、部分XML解析库等)
直接用matches()函数搭配正则表达式,用竖线分隔关键词即可,写法非常简洁:
and matches(BusinessType, 'Restaurant|Pub|Takeaway')
要是需要忽略大小写,加个标志参数就行:
and matches(BusinessType, 'restaurant|pub|takeaway', 'i')
2. 仅支持XPath 1.0的场景(旧工具、部分传统解析库)
XPath 1.0没有原生正则支持,但可以把写法做紧凑些,或者避免部分匹配的问题:
- 紧凑版多contains(和原逻辑一致,仅格式更简洁):
and (contains(BusinessType,'Restaurant') or contains(BusinessType,'Pub') or contains(BusinessType,'Takeaway'))
- 避免部分匹配的写法(比如防止
RestaurantBar被误识别为Restaurant):
and (contains(concat(',', BusinessType, ','), ',Restaurant,') or contains(concat(',', BusinessType, ','), ',Pub,') or contains(concat(',', BusinessType, ','), ',Takeaway,'))
总结:能用XPath 2.0+就用matches(),是最简洁高效的方案;只能用1.0的话,选上面两种写法里适合你需求的就行。
内容的提问来源于stack exchange,提问作者DaveF
相关产品推荐
相关产品推荐

