我们有非常大的数据文件,比如这个:
<itemList>
<item>A1</item>
<item>A2</item>
<item>A3</item>
<item>...</item>
<item>A6000</item>
</itemList>
我们得把它们分成更小的块,每个小块1000块。所以看起来是这样的:
<itemList>
<itemSet>
<item>A1</item>
<item>...</item>
<item>A1000</item>
<itemSet>
<itemSet>
<item>...</item>
在XQuery中,最好的分割方法是什么?有什么想法吗?
非常感谢
发布于 2015-10-12 13:30:04
加窗口的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]
}
}
发布于 2015-10-12 13:22:45
我建议一个有窗口的查询:
<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>
您可以使用Zorba 这里进行测试(我使用了较小的窗口)。
https://stackoverflow.com/questions/33081129
复制相似问题