XQuery:如何将大型xml文件拆分为较小的文件

XQuery:如何将大型xml文件拆分为较小的文件,xml,xquery,Xml,Xquery,我们有非常大的数据文件,如下所示: <itemList> <item>A1</item> <item>A2</item> <item>A3</item> <item>...</item> <item>A6000</item> </itemList> A1 A2 A3 ... A6000 我们必须把它们分成1000块的小块。所以它看起来像这

我们有非常大的数据文件,如下所示:

<itemList>
 <item>A1</item>
 <item>A2</item>
 <item>A3</item>
 <item>...</item>
 <item>A6000</item>
</itemList>

A1
A2
A3
...
A6000
我们必须把它们分成1000块的小块。所以它看起来像这样:

<itemList>
 <itemSet>
  <item>A1</item>
  <item>...</item>
  <item>A1000</item>
 <itemSet>
 <itemSet>
  <item>...</item>

A1
...
1000
...
在XQuery中拆分它的最佳方法是什么?有什么想法吗


非常感谢

我建议使用窗口查询:

<itemList>
{
    for tumbling window $items in $document/item
    start at $i when true()
    end at $j when $j eq $i + 999
    return
        <itemSet>
        {
                $items
        }
        </itemSet>
}
</itemList>

{
用于翻滚窗口$document/item中的$items
true()时从$i开始
当$j等于$i+999时,以$j结束
返回
{
$items
}
}

您可以使用Zorba测试它(我使用的是较小的窗口)

带窗口的for循环是最佳答案(请参阅Ghislain的答案),但这仅在XQuery 3中可用,您的处理器可能不支持。在这种情况下,您可以使用自己的语言,就像使用其他语言一样:

declare variable $itemList := <itemList>
 <item>A1</item>
 <item>A2</item>
 <item>A3</item>
 <item>A4</item>
 <item>A5</item>
 <item>A6</item>
 <item>A7</item>
 <item>A8</item>
</itemList>;
declare variable $groupSize := 3;

element itemList {
  for $group in (0 to fn:ceiling(count($itemList/item) div $groupSize) - 1)
  let $groupStart := ($group * $groupSize) +1
  let $groupEnd := ($group + 1) * $groupSize
  return
    element itemGroup {
      $itemList/item[$groupStart to $groupEnd]
    }
}
声明变量$itemList:=
A1
A2
A3
A4
A5
A6
A7
A8
;
声明变量$groupSize:=3;
元素项列表{
对于$group in(0到fn:上限(计数($itemList/item)div$groupSize)-1)
让$groupStart:=($group*$groupSize)+1
设$groupEnd:=($group+1)*$groupSize
返回
元素项组{
$itemList/item[$groupStart到$groupEnd]
}
}

由于无法处理XQuery 3,我们实现了与您提供的类似的解决方案。谢谢你的支持