Selecionar e Filtrar no XQuery

Documento de exemplo XML

Vamos continuar usando o documento "books.xml" nos exemplos a seguir (o mesmo arquivo XML usado nos capítulos anteriores).

Veja o arquivo "books.xml" no seu navegador.

Selecionar e filtrar elementos

Como visto nos capítulos anteriores, usamos expressões de caminho ou expressões FLWOR para selecionar e filtrar elementos.

Veja a expressão FLWOR abaixo:

for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title
for
(opcional) Atrelar uma variável a cada item retornado por uma expressão in
let
(opcional)
where
(opcional) Definir uma condição
order by
(opcional) Definir a ordem do resultado
return
Define o conteúdo retornado no resultado

comando for

O comando for pode atrelar variáveis a cada item retornado por uma expressão in. O comando for pode gerar iterações. Pode haver múltiplos comandos for dentro de uma expressão FLWOR.

Para fazer loop uma quantidade específica de vezes em um comando for, você pode usarPalavra-chave to :

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

Resultados:

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

Palavra-chave at Pode ser usado para calcular iterações:

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

Resultados:

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

Também é assim no comando forPermite múltiplas expressões inUse vírgula para separar cada expressão in:

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

Resultados:

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

let declaração

A instrução let pode realizar atribuição de variáveis e evitar repetições de expressões idênticas. A instrução let não causa iterações.

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

Resultados:

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

Instrução where

A instrução where define uma ou mais condições (criterios) para os resultados.

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

Instrução order by

A instrução order by define a ordem de classificação dos resultados. Aqui, queremos classificar os resultados com base em category e title:

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

Resultados:

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

Instrução return:

A instrução return define o conteúdo a ser retornado.

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

Resultados:

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