Sélection et filtrage en XQuery

Document d'exemple XML

Nous allons continuer à utiliser le document "books.xml" dans les exemples ci-dessous (le même fichier XML que dans les chapitres précédents).

Voyez le fichier "books.xml" dans votre navigateur.

Sélectionner et filtrer les éléments

Comme vu dans les chapitres précédents, nous utilisons les expressions d'accès ou les expressions FLWOR pour sélectionner et filtrer les éléments.

Voyez l'expression FLWOR suivante :

for $x in doc("books.xml")/bookstore/book
où $x/price>30
trier par $x/title
return $x/title
for
(optionnel) Lie une variable à chaque élément retourné par l'expression in
let
(optionnel)
(optionnel) Définir une condition
trier par
(optionnel) Définir l'ordre du résultat
retourner
Définir ce qui est retourné dans le résultat

instruction for

L'instruction for lie une variable à chaque élément retourné par l'expression in. L'instruction for peut générer une itération. Plusieurs instructions for peuvent exister dans une même expression FLWOR.

Pour itérer un certain nombre de fois dans une instruction for, vous pouvez utilisermot-clé à :

pour $x en (1 à 5)
return <test>{$x}</test>

Résultat :

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

mot-clé à Peut être utilisé pour calculer les itérations :

pour $x à $i in doc("books.xml")/bookstore/book/title
retourner <book>{$i}. {data($x)}</book>

Résultat :

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

De même dans l'instruction forIl est permis de multiples expressions inVeuillez utiliser la virgule pour séparer chaque expression in :

pour $x en (10,20), $y en (100,200)
retourner <test>x={$x} et y={$y}</test>

Résultat :

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

instruction let

La directive let peut effectuer une allocation de variable et éviter de répéter plusieurs fois la même expression. La directive let ne cause pas d'itération.

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

Résultat :

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

Directive where

La directive where est utilisée pour définir une ou plusieurs conditions (critères) pour les résultats.

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

Directive order by

La directive order by est utilisée pour définir l'ordre de tri des résultats. Ici, nous devons trier les résultats en fonction de category et title :

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

Résultat :

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

Directive return :

La directive return spécifie le contenu à renvoyer.

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

Résultat :

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