Один из вариантов - перебрать все предметы и просто взять предметы, как только предметы достигнут делителя, в данном случае 2. Единственный недостаток - вы не достигнете последней группы предметов, если предметы еще кратные делителя. Например, последний элемент последовательности с нечетным числом элементов не будет возвращен при таком подходе.
for $item at $index in $items
return
if ($item mod 2 = 0) then
($items[$index - 1], $items[$index])
else
()
Другой вариант - использовать мод и индекс предмета. Используя этот подход, вы можете убедиться, что включили все элементы в последовательность $ 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])