XQuery valitse ja suodata

XML-esimerkkiasiakirja

Jatkamme alla olevassa esimerkissä tätä "books.xml"-asiakirjaa (ja samanlaisia XML-tiedostoja, joita käytettiin edellisissä luvuissa).

Tarkastele "books.xml"-tiedostoa selaimesi kautta.

Valitse ja suodata elementtejä

Kuten edellisissä luvuissa nähtiin, käytämme polkuilmauksia tai FLWOR-lauseita elementtien valintaan ja suodattamiseen.

Katso seuraava FLWOR-lause:

for $x in doc("books.xml")/bookstore/book
missä $x/price>30
järjestä $x/title
return $x/title
for
(Valinnainen) Sitoa muuttuja jokaiseen in-lauseen palauttamaan kohteeseen
let
(Valinnainen)
missä
(Valinnainen) Määritä ehto
järjestä
(Valinnainen) Määritä tulosten järjestys
palauta
Määrittää palautettavan sisällön

for-lause

for-lause voi sitoa muuttujan in-lauseen palauttamaan jokaiseen kohteeseen. for-lause voi tuottaa iteratiivisia tapahtumia. Useita for-lauseita voi olla samassa FLWOR-lauseessa.

Jos haluat suorittaa tietyn määrän kerran toistuvan for-lauseen, voit käyttääAvainsana to :

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

Tulokset:

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

Avainsana at Käytettävissä iteratiivisten laskutoimitusten laskemiseen:

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

Tulokset:

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

Samoin for-lauseessaUseita in-lauseita sallitaanKäytä pilkkuja erottamaan jokainen in-lause:

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

Tulokset:

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

let lause

let lause voi suorittaa muuttujien allokoinnin ja välttää useamman saman lauseen toistamisen. let lause ei johda iterointiin.

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

Tulokset:

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

where lause

where lause määrittelee tulosten yhden tai useamman ehdotuksen (kriteerit).

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

order by lause

order by lause määrittelee tulosten järjestysjärjestyksen. Tässä haluamme järjestää tulokset category ja title perusteella:

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

Tulokset:

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

return lause määrittelee palautettavan sisällön.

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

Tulokset:

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