如何在XPath中实现属性值的多选项IN检查?
XPath实现属性值的IN集合匹配
如果你的环境支持XPath 2.0及以上版本,直接用in运算符就能实现,注意语法上要把目标值放在括号里(你之前的写法少了括号,是错误的):
.//Time[@TOD='Day']//Task[@Status in ('COMPLETED', 'BLOCKED')]
或者也可以用等值匹配结合集合的写法,效果完全一样:
.//Time[@TOD='Day']//Task[@Status = ('COMPLETED', 'BLOCKED')]
如果你的环境只能用XPath 1.0(很多旧系统或工具默认用1.0),因为1.0没有in运算符,有两种替代方案:
- 用
or连接多个等值判断,适合值不多的场景:
.//Time[@TOD='Day']//Task[@Status='COMPLETED' or @Status='BLOCKED']
- 用
contains结合分隔符技巧,适合值较多的场景,避免写一堆or:
.//Time[@TOD='Day']//Task[contains('|COMPLETED|BLOCKED|', concat('|', @Status, '|'))]
这里用|作为分隔符是为了避免部分匹配的问题(比如防止把COMPLETED误匹配成COMPLETED_X这类相似值)。
内容的提问来源于stack exchange,提问作者Sayantan Roy
相关产品推荐
相关产品推荐

