С XPath 3.1 вы можете, по крайней мере, структурировать результат таким образом, чтобы иметь чанки из 5 элементов, например,
let $items := root/item,
$size := 5
return
for $i in (1 to count($items))[position() mod $size = 1]
return array{$items[position() = ($i to ($i + $size - 1))]}
возвращает последовательность массивов, где каждый массив имеет $size
элементов (соответственнопоследний массив остальные элементы).
https://xqueryfiddle.liberty -development.net / eiQZDbd показывает результат (обратите внимание, что инструмент поддерживает XQuery 3.1, где у вас есть гораздо более простые и эффективные способы группировки иокно, но я попытался написать чистое выражение XPath 3.1).
Другой результат будет один массив, где каждый элемент представляет собой последовательность $size
элементов, например
declare namespace array = "http://www.w3.org/2005/xpath-functions/array";
array:join(
let $items := root/item,
$size := 5
return
for $i in (1 to count($items))[position() mod $size = 1]
return [$items[position() = ($i to ($i + $size - 1))]]
)
The declare
снова XQuery, с чистым XPath 3.1 вам нужно использовать специфический для API способ или, возможно, инструмент, который гарантирует, что пространство имен для функций массива объявлено.