Как вернуть диапазон узлов XML с помощью XQuery FLWOR?

Мне нужно получить определенный диапазон результатов, скажем, от 99 до 199 или, возможно, последний JSON объект. Хотя это работает для небольших чисел или диапазонов, как его можно обобщить или расширить до большего диапазона?

xquery version "3.0";

for $i in (1,2,3)
for $line in db:open("json_people")
return $line/json/_[$i]

person Thufir    schedule 17.02.2020    source источник
comment
Мне непонятно, чего вы хотите добиться. Больше всего меня смущают названия ваших переменных. Действительно ли db:open возвращает строки? Не могли бы вы заменить функцию базы данных фрагментом XML, который позволит нам запускать ваш код без дальнейших изменений?   -  person Christian Grün    schedule 17.02.2020
comment
это не было чем-то конкретным, просто чтобы получить ряд результатов. line — плохое имя, да. Я продолжал пробовать (99..199) или другие варианты, но не мог найти правильный синтаксис.   -  person Thufir    schedule 17.02.2020


Ответы (2)


Вы можете избежать вложенного цикла, использовать функцию position() и указать диапазон:

db:open("json_people")/json/_[position() = 99 to 199]
person Christian Grün    schedule 17.02.2020
comment
Или, если хотите, subsequence(db:open("json_people")/json/_, 99, 100). Обратите внимание, что еще раз зацикливание на поиске выражения FLWOR для этого на самом деле вам не поможет. - person Michael Kay; 17.02.2020
comment
достаточно честно, @MichaelKay - я также воспользовался возможностью немного изучить flwor и в то же время не хотел сбиваться с пути. - person Thufir; 27.02.2020

Вы можете использовать диапазон в XQuery следующим образом:

for $i in (99 to 199)
person Yitzhak Khabinsky    schedule 17.02.2020