Sélection et filtrage XQuery
L'exemple de document XML
Nous utiliserons le document "books.xml" dans les exemples ci-dessous (même fichier XML que dans les chapitres précédents).
Affichez le fichier "books.xml" dans votre navigateur .
Sélection et filtrage des éléments
Comme nous l'avons vu dans les chapitres précédents, nous sélectionnons et filtrons des éléments soit avec une expression Path soit avec une expression FLWOR.
Regardez l'expression FLWOR suivante :
for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
- for - (facultatif) lie une variable à chaque élément renvoyé par l'expression in
- laisser - (facultatif)
- où - (facultatif) spécifie un critère
- order by - (facultatif) spécifie l'ordre de tri du résultat
- return - spécifie ce qu'il faut retourner dans le résultat
La clause pour
La clause for lie une variable à chaque élément renvoyé par l'expression in. La clause for entraîne une itération. Il peut y avoir plusieurs clauses for dans la même expression FLWOR.
Pour boucler un certain nombre de fois dans une clause for, vous pouvez utiliser le mot-clé to :
for $x in (1 to 5)
return <test>{$x}</test>
Résultat:
<test>1</test>
<test>2</test>
<test>3</test>
<test>4</test>
<test>5</test>
Le mot-clé at peut être utilisé pour compter l'itération :
for $x at $i in doc("books.xml")/bookstore/book/title
return <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>
Il est également autorisé avec plus d'une expression dans la clause for. Utilisez une virgule pour les séparer dans l'expression :
for $x in (10,20), $y in (100,200)
return <test>x={$x} and y={$y}</test>
Résultat:
<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>
La clause let
La clause let autorise les affectations de variables et évite de répéter plusieurs fois la même expression. La clause let n'entraîne pas d'itération.
let $x := (1 to 5)
return <test>{$x}</test>
Résultat:
<test>1 2 3 4 5</test>
La clause où
La clause where est utilisée pour spécifier un ou plusieurs critères pour le résultat :
where $x/price>30 and $x/price<100
La commande par Clause
La clause order by est utilisée pour spécifier l'ordre de tri du résultat. Ici, nous voulons ordonner le résultat par catégorie et titre :
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>
La clause de retour
La clause de retour spécifie ce qui doit être retourné.
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>