Seleção e filtragem de XQuery
O documento de exemplo XML
Usaremos o documento "books.xml" nos exemplos abaixo (mesmo arquivo XML dos capítulos anteriores).
Visualize o arquivo "books.xml" em seu navegador .
Selecionando e Filtrando Elementos
Como vimos nos capítulos anteriores, estamos selecionando e filtrando elementos com uma expressão Path ou com uma expressão FLWOR.
Observe a seguinte expressão FLWOR:
for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
- for - (opcional) vincula uma variável a cada item retornado pela expressão in
- deixe - (opcional)
- onde - (opcional) especifica um critério
- order by - (opcional) especifica a ordem de classificação do resultado
- return - especifica o que retornar no resultado
A cláusula para
A cláusula for vincula uma variável a cada item retornado pela expressão in. A cláusula for resulta em iteração. Pode haver várias cláusulas for na mesma expressão FLWOR.
Para fazer um loop de um número específico de vezes em uma cláusula for, você pode usar a palavra-chave to :
for $x in (1 to 5)
return <test>{$x}</test>
Resultado:
<test>1</test>
<test>2</test>
<test>3</test>
<test>4</test>
<test>5</test>
A palavra-chave at pode ser usada para contar a iteração:
for $x at $i in doc("books.xml")/bookstore/book/title
return <book>{$i}. {data($x)}</book>
Resultado:
<book>1. Everyday Italian</book>
<book>2. Harry Potter</book>
<book>3. XQuery Kick Start</book>
<book>4. Learning XML</book>
Também é permitido com mais de uma expressão na cláusula for. Use vírgula para separar cada uma na expressão:
for $x in (10,20), $y in (100,200)
return <test>x={$x} and y={$y}</test>
Resultado:
<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>
A cláusula let
A cláusula let permite atribuições de variáveis e evita repetir a mesma expressão muitas vezes. A cláusula let não resulta em iteração.
let $x := (1 to 5)
return <test>{$x}</test>
Resultado:
<test>1 2 3 4 5</test>
A cláusula where
A cláusula where é usada para especificar um ou mais critérios para o resultado:
where $x/price>30 and $x/price<100
A ordem por cláusula
A cláusula order by é usada para especificar a ordem de classificação do resultado. Aqui queremos ordenar o resultado por categoria e título:
for $x in doc("books.xml")/bookstore/book
order by $x/@category, $x/title
return $x/title
Resultado:
<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>
A cláusula de retorno
A cláusula return especifica o que deve ser retornado.
for $x in doc("books.xml")/bookstore/book
return $x/title
Resultado:
<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>