交替(交错?)两个XQuery For循环

时间:2016-04-22 23:07:24

标签: loops xquery

如果a = A,B,C和b = 1,2,3那么在XQuery中我可以有连续的循环,如:

{for $x in a
return $x}

{for $y in b
return $y}

将返回 A,B,C,1,2,3

或者我可以使用嵌套循环:

{for $x in a
return $x
    for $y in b
    return $y}}

会返回 A1,A2,A3,B1,B2,B3,C1,C2,C3 (或者反过来,但你知道我的意思)。

然而,我需要的是返回 A,1,B,2,C,3

我正在努力寻找一种方法来获得两个循环,但在我的输出中交替显示它们的结果。有什么建议?我已经搜索了一个解决方案,但我不是XQuery专家,我甚至不确定我是否使用了正确的术语。

2 个答案:

答案 0 :(得分:3)

在XQuery 3.0中,有高阶函数fn:for-each-pair($seq1, $seq2, $f),它将用户提供的函数应用于两个输入序列$f($seq1[1], $seq2[1]), $f($seq1[2], $seq2[2]), ...的第一个,第二个等项。直到其中一个序列耗尽。对于您的用例,您只需要序列连接:

fn:for-each-pair(('A', 'B', 'C'), (1, 2, 3), function($a, $b) { $a, $b })

答案 1 :(得分:1)

您可以在第一个序列中使用迭代器的位置来获取第二个序列中相同位置的值:

for $x at $pos in a
let $y := b[$pos]
return ($x, $y)