XQuery ВыбориФильтрация


Пример XML-документа

Мы продолжим использовать этот документ "books.xml" в примерах ниже (тот же XML-файл, использованный в предыдущих главах).

。


Выбор и фильтрация элементов

Как вы видели в предыдущих главах, мы используем выражения путей или выражения FLWOR для выбора и фильтрации элементов.

Посмотрите на следующее выражение FLWOR:

for $x in doc("books.xml")/bookstore/book
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:

for $x in (1 to 5)
return <test>{$x}</test>

Результат:

<test>1</test>
<test>2</test>
<test>3</test>
<test>4</test>
<test>5</test>

Ключевое словоat можно использовать для подсчёта итераций:

for $x at $i in doc("books.xml")/bookstore/book/title
return <book>{$i}. {data($x)}</book>

Результат:

<book>1. Everyday Italian</book>
<book>2. Harry Potter</book>
<book>3. XQuery Kick Start</book>
<book>4. Learning XML</book>

В операторе for также допускается несколько выражений in. Для разделения каждого выражения in используйте запятые:

for $x in (10,20), $y in (100,200)
return <test>x={$x} and y={$y}</test>

Результат:

<test>x=10 and y=100</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 не вызывает итераций.

let $x := (1 to 5)
return <test>{$x}</test>

Результат:

<test>1 2 3 4 5</test>

оператор where

Оператор where используется для задания одного или нескольких условий (критериев) для результатов.

where $x/price>30 and $x/price<100

оператор order by

Оператор order by используется для указания порядка сортировки результатов. Здесь мы отсортируем результаты по category и title:

for $x in doc("books.xml")/bookstore/book
order by $x/@category, $x/title
return $x/title

Результат:

Harry Potter
Everyday Italian
Изучение XML
XQuery Kick Start

оператор return:

Оператор return определяет, что возвращать.

for $x in doc("books.xml")/bookstore/book
return $x/title

Результат:

Everyday Italian
Harry Potter
XQuery Kick Start
Изучение XML
Другие расширения