2016-04-22 23 views
1

如果= A,B,C和b = 1,2,3然后XQuery中我可以具有连续的环,如:交替(交织?)2的XQuery For循环

{for $x in a 
return $x} 

{for $y in b 
return $y} 

它将返回甲,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专家,我甚至不确定我是否使用了正确的术语。

+0

序列'a'和'b'是否保证长度相同?如果是这样,您可以迭代一个,并使用该循环中的位置来获取另一个序列中相同位置的值。 – wst

回答

1

可以使用第一序列中的迭代器的位置在第二序列中的相同的位置,以获得值:

for $x at $pos in a 
let $y := b[$pos] 
return ($x, $y) 
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 })