XQuery出现‘Item expected, sequence found’错误的问题排查与解决请求
解决XQuery中"Item expected, sequence found"错误并实现城市名称逗号分隔输出
我来帮你分析问题并搞定这个报错。先说说为什么会出现这个错误:
你原来的代码里,$p是满足state > 15条件的所有provider节点组成的序列(也就是Smith和Adams这两个节点)。当你调用$p/city/text()时,得到的是多个文本节点的序列("London"和"Athens"),而concat()函数的参数要求是单个项(item),它没法直接处理序列,所以就抛出了"Item expected, sequence found"的错误。
正确的解决方案
要实现把满足条件的城市名称用逗号分隔输出,你应该用XQuery内置的string-join()函数——这个函数专门用来将字符串序列拼接成一个单一的字符串,完美适配你的需求。
修改后的代码如下:
let $p := doc("providers.xml")/data/providers/provider where $p/state > 15 return <cities>{string-join($p/city/text(), ' , ')}</cities>
或者更简洁的写法(直接提取目标城市序列):
let $target-cities := doc("providers.xml")/data/providers/provider[state > 15]/city/text() return <cities>{string-join($target-cities, ' , ')}</cities>
代码解释
string-join($sequence, $separator):第一个参数是要拼接的字符串序列,第二个参数是分隔符。它会自动遍历序列中的每个元素,用指定的分隔符把它们连接成一个字符串。- 这样修改后,最终会输出一个
<cities>元素,内容是London , Athens,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Cryptter
相关产品推荐
相关产品推荐

