如何编写满足多或条件判断的XPath3表达式?
XPath3表达式错误修正与正确实现
需求说明
需编写XPath3表达式实现以下逻辑:
- 当
fruit值为apple(不区分大小写)且quantity小于12,或fruit值为watermelon(不区分大小写)且quantity小于2时,返回"in-store shopping" - 其他情况返回
"online"
问题场景
用户尝试的表达式报错,错误提示:
Error: Expected 'then' token in conditional if expression
错误表达式如下:
if(//fruit= "apple" and //quantity<12) or if(//fruit= "watermelon" and //quantity<2) then "in-store shopping" else "online"
测试用XML示例:
<table> <fruit>Apple</fruit> <quantity>5</quantity> </table>
错误原因
XPath3的if表达式语法规则为if (条件表达式) then 结果1 else 结果2,不允许多个if直接通过or拼接。原表达式错误拆分了条件判断结构,导致语法不合法。此外,原表达式未处理大小写匹配问题,且未明确将quantity节点值转为数字类型,存在潜在的匹配或比较错误。
正确表达式
if ( (lower-case(//fruit) = "apple" and number(//quantity) < 12) or (lower-case(//fruit) = "watermelon" and number(//quantity) < 2) ) then "in-store shopping" else "online"
关键修正点
- 合并条件:将两个判断条件通过
or合并到同一个if的条件括号内,符合XPath语法规范 - 大小写兼容:使用
lower-case()函数统一转换fruit节点值的大小写,避免因XML中值的大小写差异导致匹配失败 - 类型转换:使用
number()函数将quantity节点的文本值转为数字类型,确保数值比较的准确性
测试验证
针对提供的XML示例,fruit值转小写后为apple,quantity值转为数字后为5,满足第一个条件,因此表达式返回"in-store shopping"。
内容的提问来源于stack exchange,提问作者senywork7
相关产品推荐
相关产品推荐

