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

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

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

Просмотрите файл "books.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
(по умолчанию) Определяет порядок результатов
возврат
определяет содержимое, которое должно быть возвращено в результатах

строка for

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

Если вам нужно повторить цикл несколько раз в одной строке 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

Результат:

<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>