Wybór i filtrowanie w XQuery

Przykład dokumentu XML

Kontynuujemy przykład z plikiem "books.xml", który jest taki sam jak plik XML użyty w poprzednich rozdziałach.

Zobacz plik "books.xml" w swojej przeglądarce.

Wybieranie i filtrowanie elementów

Jak zobaczyliśmy w poprzednich rozdziałach, używamy wyrażeń ścieżki lub wyrażeń FLWOR do wybierania i filtrowania elementów.

Zobacz poniższe wyrażenie FLWOR:

for $x in doc("books.xml")/bookstore/book
gdzie $x/price>30
uporządkuj po $x/title
return $x/title
for
(opcjonalnie) przypiąć zmienną do każdego elementu zwróconego przez wyrażenie in
znacz
(opcjonalnie)
gdzie
(opcjonalnie) ustaw warunek
uporządkuj po
(opcjonalnie) ustawia kolejność wyników
zwróć
określa, co ma być zwrócone w wynikach

polecenie for

Polecenie for może przypiąć zmienną do każdego elementu zwróconego przez wyrażenie in. Polecenie for może generować iterację. Można mieć wiele polecień for w jednym wyrażeniu FLWOR.

Jeśli chcesz powtarzać pętlę for określoną liczbę razy, możesz użyćkluczowe słowo do :

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

Wynik:

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

słowo kluczowe at może być używane do obliczeń iteracyjnych:

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

Wynik:

<book>1. Codzienne Włoskie</book>
<book>2. Harry Potter</book>
<book>3. XQuery Kick Start</book>
<book>4. Learning XML</book>

w zdaniu for jest to samoDopuszcza się wiele wyrażeń inużyj przecinka do oddzielenia każdego wyrażenia in:

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

Wynik:

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

zdanie let

zdanie let może przypisać zmienną i uniknąć wielokrotnego powtarzania tego samego wyrażenia. Zdanie let nie powoduje iteracji.

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

Wynik:

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

where zdanie

where zdanie służy do ustawienia jednego lub kilku warunków ( kryteriów ) dla wyników.

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

order by zdanie

order by zdanie służy do określenia kolejności sortowania wyników. W tym przypadku, chcemy sortować wyniki według category i title:

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

Wynik:

<title lang="en">Harry Potter</title>
<title lang="pl">Codzienne Włoskie</title>
<title lang="en">Learning XML</title>
<title lang="en">XQuery Kick Start</title>

return zdanie:

return zdanie określa, co ma być zwrócone.

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

Wynik:

<title lang="pl">Codzienne Włoskie</title>
<title lang="en">Harry Potter</title>
<title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title>