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

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

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

Просмотрите файл "books.xml" в вашем браузере.

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

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

Пожалуйста, посмотрите на следующий 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
(опционально) Устанавливает порядок результатов
возврат
Определяет содержимое, которое возвращается в результат

выражение for

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

Чтобы повторить несколько раз в выражении for, вы можете использовать:Ключевое слово до :

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

Результат:

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

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

for $x в $i in doc("books.xml")/bookstore/book/title
возврат <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 в (10,20), $y в (100,200)
возврат <test>x={$x} и y={$y}</test>

Результат:

<test>x=10 и y=100</test>
<test>x=10 и y=200</test>
<test>x=20 и y=100</test>
<test>x=20 и y=200</test>

let выражение

letstatement может выполнять переменную присвоение и избегать повторения одинаковых выражений. letstatement не вызывает итерации.

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

Результат:

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

wherestatement

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

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

order bystatement

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

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

Результат:

<title lang="en">Harry Potter</title>
<title lang="en">Everyday Italian</title>
<title lang="en">Learning XML</title>
<title lang="en">XQuery Kick Start</title>

return语句:

return语句 определяет содержимое, которое нужно вернуть.

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

Результат:

<title lang="en">Everyday Italian</title>
<title lang="en">Harry Potter</title>
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>