为何第一条XQuery语句可正常运行而第二条无法执行
错误原因
- XQuery的
if...then...else语法要求then和else分支各自只能返回单个表达式的结果 - 第一条可运行的语句中,
then分支仅返回单个<prop>节点,属于合法的单个表达式,因此可以正常执行 - 第二条报错的语句中,
then分支直接并列了<key>、<value>两个独立节点,没有包裹为统一的序列,不符合语法规则,因此执行失败
修复方法
将then分支需要返回的多个节点用括号包裹,用逗号分隔为序列即可,修改后的代码如下:
let $payload := <root><foo>bar</foo></root> return <root> { if (exists($payload/foo)) then (<key>mykey</key>, <value>bar</value>) else "" } </root>
内容的提问来源于stack exchange,提问作者Will Black
相关产品推荐
相关产品推荐

