如何用XPath 3.1从带间隙的Map生成含null值的数组?
解决XQuery中Map转带null填充数组的问题
你的代码问题出在null(())的使用上:null(())在XQuery中是生成空序列,而array { ... }构造器会自动忽略空序列元素,导致缺失索引的位置被直接跳过,没有生成预期的null。
修正方案
将null(())替换为xs:null()(标准XQuery 3.1特性),它会生成一个有效的xs:null类型值,不会被数组构造器过滤,最终序列化JSON时会转为null。
修正后的完整代码:
let $m := map{1: "val1", 2: "val2", 5: "val5", 7: "val7"} return array { (1 to max($m => map:keys())) ! ( if ($m => map:contains(.)) then $m(.) else xs:null() ) }
验证结果
执行上述代码后,会得到你期望的输出:
["val1", "val2", null, null, "val5", null, "val7"]
如果你的XQuery处理器支持JSON扩展函数,也可以用json:null()替代xs:null(),效果一致。
内容的提问来源于stack exchange,提问作者Fravadona
相关产品推荐
相关产品推荐

