XQuery:映射到序列数组

标签 xquery

我有以下 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?* }))

https://xqueryfiddle.liberty-development.net/nbUY4ku/2

关于XQuery:映射到序列数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55240976/

相关文章:

xml - 如何在xQuery中获取没有 child 的节点?

xml - 无法获取属性值或在 XQuery 中获取错误 XQDY0025

xml - XQuery 过滤动态行列表

sql-server - 使用 XML 输入的 SQL SELECT

sql-server - 为什么在使用 XQuery 时执行计划中有排序

xml - Marklogic : Multiple XML files created on document on importing a csv. 如何获取根文档URI路径?

filter - JMS 消息正文字符串上的 Xquery

sql-server - 在 SQL Server 的单个 XQuery 中删除多个节点

java - Saxon 9.4 来自 cygwin 的查询

xquery - 如何使节点变量摆脱错误