我有以下 map :
let $input := map { 'a-key': 'a-value', 'b-key': ['b-value-1', 'b-value-2'] }
(b-key
数组的长度可以变化,也可以不存在;a-key
可以存在或不存在)
我需要创建以下数组:
[ ('a', 'b', 'b'), 'a-value', 'b-value-1', 'b-value-2' ]
第一个序列中b
的个数应该对应于b-value
的个数。
我已经尝试了迭代/map:for-each 等的几乎每一种组合,数组要么以过多的嵌套结束,要么完全平坦......
(注意,数组将被传递给一个函数——不是我的!——使用fn:apply
,所以需要采用这种形式)
最佳答案
构建一个包含动态构造的序列的数组似乎很难,我认为你首先需要将序列构造成一个变量,然后使用方括号数组构造函数[$seq]
来以序列作为单个项目构造数组。然后你可以array:join
其他值:
let $input := map { 'a-key': 'a-value', 'b-key': ['b-value-1', 'b-value-2'] }
let $seq := ($input?a-key!'a', (1 to array:size($input?b-key))!'b')
return
array:join(([$seq], array {$input?a-key, $input?b-key?* }))
关于XQuery:映射到序列数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55240976/