XQuery代码运行报XPST0003语法错误,无法定位具体出错位置
错误原因
- 语法层面:XQuery不支持
:=变量重赋值语法,你用的是命令式编程语言的变量更新写法,不符合XQuery语法规范,所以直接触发XPST0003语法错误。 - 逻辑层面:XQuery是函数式语言,所有变量声明后不可变,你设计的循环累加计数的思路本身不符合XQuery的设计范式。
修复代码
你要实现的「统计机场数量超过25的国家并输出国家名、对应机场数」的需求,可以直接用XQuery内置的count()函数实现,不需要手写循环计数,修正后代码如下:
let $d := doc('mondial.xml') let $airports := $d/mondial/airport let $countries := $d/mondial/country for $country in $countries let $car_code := $country/@car_code let $airport_count := count($airports[@country = $car_code]) where $airport_count > 25 return <country> <name>{data($country/name)}</name> <count>{$airport_count}</count> </country>
优化说明
- 直接通过
count($airports[@country = $car_code])一步统计出当前国家对应的机场总数,省略了冗余的嵌套循环和计数变量声明 - 去掉了不必要的类型转换,
count()函数返回值本身就是整数,不需要额外做xs:integer转换
内容的提问来源于stack exchange,提问作者ali sood
相关产品推荐
相关产品推荐

