Selezione e filtraggio di XQuery
Il documento di esempio XML
Utilizzeremo il documento "books.xml" negli esempi seguenti (stesso file XML dei capitoli precedenti).
Visualizza il file "books.xml" nel tuo browser .
Selezione e filtraggio degli elementi
Come abbiamo visto nei capitoli precedenti, stiamo selezionando e filtrando gli elementi con un'espressione Path o con un'espressione FLWOR.
Osserva la seguente espressione FLWOR:
for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
- for - (facoltativo) associa una variabile a ogni elemento restituito dall'espressione in
- lascia - (facoltativo)
- dove - (facoltativo) specifica un criterio
- order by - (opzionale) specifica l'ordinamento del risultato
- return - specifica cosa restituire nel risultato
La clausola per
La clausola for associa una variabile a ogni elemento restituito dall'espressione in. La clausola for risulta nell'iterazione. Possono esserci più clausole for nella stessa espressione FLWOR.
Per ripetere un numero specifico di volte in una clausola for, puoi utilizzare la parola chiave to :
for $x in (1 to 5)
return <test>{$x}</test>
Risultato:
<test>1</test>
<test>2</test>
<test>3</test>
<test>4</test>
<test>5</test>
La parola chiave at può essere utilizzata per contare l'iterazione:
for $x at $i in doc("books.xml")/bookstore/book/title
return <book>{$i}. {data($x)}</book>
Risultato:
<book>1. Everyday Italian</book>
<book>2. Harry Potter</book>
<book>3. XQuery Kick Start</book>
<book>4. Learning XML</book>
È consentito anche con più di uno in espressione nella clausola for. Usa la virgola per separare ciascuno nell'espressione:
for $x in (10,20), $y in (100,200)
return <test>x={$x} and y={$y}</test>
Risultato:
<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 clausola let
La clausola let consente assegnazioni di variabili ed evita di ripetere più volte la stessa espressione. La clausola let non risulta nell'iterazione.
let $x := (1 to 5)
return <test>{$x}</test>
Risultato:
<test>1 2 3 4 5</test>
La clausola dove
La clausola where viene utilizzata per specificare uno o più criteri per il risultato:
where $x/price>30 and $x/price<100
L'ordine per clausola
La clausola order by viene utilizzata per specificare l'ordinamento del risultato. Qui vogliamo ordinare il risultato per categoria e titolo:
for $x in doc("books.xml")/bookstore/book
order by $x/@category, $x/title
return $x/title
Risultato:
<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 clausola di ritorno
La clausola di restituzione specifica cosa deve essere restituito.
for $x in doc("books.xml")/bookstore/book
return $x/title
Risultato:
<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>