XQuery ВыбориФильтрация
Пример XML-документа
Мы продолжим использовать этот документ "books.xml" в примерах ниже (тот же XML-файл, использованный в предыдущих главах).
。
Выбор и фильтрация элементов
Как вы видели в предыдущих главах, мы используем выражения путей или выражения FLWOR для выбора и фильтрации элементов.
Посмотрите на следующее выражение FLWOR:
where $x/price>30
order by $x/title
return $x/title
- for — (необязательно) связывает переменную с каждым элементом, возвращаемым выражением in
- let — (необязательно)
- where — (необязательно) задает условие
- order by — (необязательно) задает порядок сортировки результатов
- return — указывает, что возвращать в результате
инструкция for
Оператор for связывает переменную с каждым элементом, возвращаемым выражением in. Оператор for может порождать итерации. Несколько операторов for могут существовать в одном и том же FLWOR-выражении.
Чтобы выполнить цикл заданное число раз в операторе for, можно использовать ключевое слово to:
return <test>{$x}</test>
Результат:
<test>2</test>
<test>3</test>
<test>4</test>
<test>5</test>
Ключевое словоat можно использовать для подсчёта итераций:
return <book>{$i}. {data($x)}</book>
Результат:
<book>2. Harry Potter</book>
<book>3. XQuery Kick Start</book>
<book>4. Learning XML</book>
В операторе for также допускается несколько выражений in. Для разделения каждого выражения in используйте запятые:
return <test>x={$x} and y={$y}</test>
Результат:
<test>x=10 and y=200</test>
<test>x=20 and y=100</test>
<test>x=20 and y=200</test>
оператор let
Оператор let выполняет присваивание переменной и позволяет избежать многократного повторения одного и того же выражения. Оператор let не вызывает итераций.
return <test>{$x}</test>
Результат:
оператор where
Оператор where используется для задания одного или нескольких условий (критериев) для результатов.
оператор order by
Оператор order by используется для указания порядка сортировки результатов. Здесь мы отсортируем результаты по category и title:
order by $x/@category, $x/title
return $x/title
Результат:
оператор return:
Оператор return определяет, что возвращать.
return $x/title
Результат: