在xquery中,一个人如何对一个序列进行两次迭代?

在xquery中,一个人如何对一个序列进行两次迭代?,xquery,Xquery,我想在xquery中迭代一个序列,一次获取2个元素。最简单的方法是什么?一种方法是迭代所有项目,并在项目达到除数(在本例中为2)后仅获取项目。一个缺点是,如果项目不是除数的倍数,则无法到达最后一组项目。例如,此方法不会返回元素数为奇数的序列的最后一个元素 for $item at $index in $items return if ($item mod 2 = 0) then ($items[$index - 1], $items[$index]) else ()

我想在xquery中迭代一个序列,一次获取2个元素。最简单的方法是什么?

一种方法是迭代所有项目,并在项目达到除数(在本例中为2)后仅获取项目。一个缺点是,如果项目不是除数的倍数,则无法到达最后一组项目。例如,此方法不会返回元素数为奇数的序列的最后一个元素

for $item at $index in $items
  return
  if ($item mod 2 = 0) then
    ($items[$index - 1], $items[$index])
  else
    ()
另一个选项是使用mod和项的索引。使用这种方法,您可以通过将少于组中项目数的一个元素添加到计数中,确保包含$items序列中的所有元素

let $group-size := 2

return
for $index in (1 to fn:count($items)+($group-size - 1))[. mod $group-size = 0]
  return
  ($items[$index - 1] , $items[$index])
让$s:=(“a”、“b”、“c”、“d”、“e”、“f”)
对于1到xs中的$i:integer(count($s)div 2)
返回
{($s[$i*2-1],$s[$i*2])}
返回

<pair>a b</pair>
<pair>c d</pair>
<pair>e f</pair>
ab
c d
EF

XQuery 3.0解决方案

对于这种和更复杂的分页用例,已经在XQuery 3.0中创建了。但是,许多XQuery处理器还不支持它

窗口示例

下面是一个可以执行的工作示例,例如:

用于翻滚窗口$pair(2,4,6,8,10,12,14)
fn:true()时从$s开始
当$e-$s等式1时,以$e结尾
返回{$pair}
结果

<window>2 4</window><window>6 8</window><window>10 12</window><window>14</window>
2468101214

我喜欢它。我想我们最终能用上这个。看起来也有各种类型的窗口。很高兴知道。
<pair>a b</pair>
<pair>c d</pair>
<pair>e f</pair>
for tumbling window $pair in (2, 4, 6, 8, 10, 12, 14)
    start at $s when fn:true()
    end at $e when $e - $s eq 1
return <window>{ $pair }</window>
<window>2 4</window><window>6 8</window><window>10 12</window><window>14</window>