Xpath 1中是否存在更简洁高效的列表项筛选语法?
XPath 1多值排除筛选的优化写法
更简洁且执行更快的实现代码
直接替换原有逻辑即可:[not(contains('|10281147|3157344949|6099815862|6100309416|6104595405|6691194319|', concat('|', @id, '|')))]
逻辑说明
- 核心是用字符串包含匹配替代多条件OR判断:把所有需要排除的ID用不会出现在ID值中的分隔符(这里选
|,适配纯数字ID场景)拼接为一个完整字符串,再给当前节点的@id前后也拼接相同分隔符,单次contains判断即可完成多值匹配。 - 执行速度优于原有写法:绝大多数XPath 1解析引擎的原生字符串匹配优化程度远高于多个OR条件的逐一判断,需要排除的ID数量越多,性能优势越明显。
- 维护成本更低:后续新增需要排除的ID时,只需要在拼接字符串中追加
|新ID即可,不需要反复新增or @id='xxx'的判断条件。
注意事项
- 分隔符必须选择所有待排除ID中都不存在的字符,避免出现误匹配。如果你的ID可能包含
|,可以替换为~、^等其他不会出现的特殊字符。 - 该写法完全兼容标准XPath 1规范,不需要依赖任何扩展函数。
内容的提问来源于stack exchange,提问作者DaveF
相关产品推荐
相关产品推荐

