Supongamos que tenemos el siguiente documento XML guardado como "empleados.xml":
<empleados>
<empleado id="1">
<nombre>Juan</nombre>
<departamento>Finanzas</departamento>
</empleados>
<empleado id="2">
<nombre>Ana</nombre>
<departamento>TI</departamento>
</empleado>
</empleados>
Para seleccionar todos los nodos de empleado: doc("empleados.xml")/empleados/empleado
Ahora, para seleccionar el nombre del primer empleado: doc("empleados.xml")/empleados/empleado[1]/nombre
Finalmente, para seleccionar por atributo: doc("empleados.xml")/empleados/empleado[@id="2"]
En XQuery, un lenguaje de consulta diseñado para trabajar con datos XML, el for-in es un constructo clave que se usa para iterar sobre secuencias de nodos o valores. El constructo for-in es parte de las expresiones FLWOR de XQuery, que son análogas a las cláusulas SELECT en SQL, pero mucho más poderosas en cuanto a iteración y transformación de datos XML.
La expresión FLWOR se compone de cinco partes potenciales, que son: For, Let, Where, Order by, y Return. No todas tienen que estar presentes en una consulta. El nombre FLWOR se deriva de las iniciales de estas cinco palabras clave.
La sintaxis básica es la siguiente: for $variable in secuencia return expresión
for: Se declara una variable (por ejemplo, $variable) y se itera sobre cada ítem en una secuencia de elementos o nodos.
in: Se especifica la secuencia sobre la que iterar. Esta secuencia puede ser una colección de nodos XML, un rango de números, resultados de otras consultas, etc.
return: Para cada ítem en la secuencia, se ejecuta la parte del return, que especifica qué hacer con cada ítem iterado. Esta parte puede contener operaciones complejas y otras sub-consultas.
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
Extraer los títulos de aquellos libros que tengas un precio mayor a 30
for $x in doc("books.xml")/bookstore/book
where $x/price>30
return $x/title
La cláusula let se utiliza para definir variables que almacenan resultados de expresiones, que luego pueden ser reutilizados múltiples veces en una consulta. Esta es una forma muy poderosa de mejorar la legibilidad y eficiencia de las consultas XQuery, permitiéndote asignar resultados intermedios a nombres de variables para facilitar su acceso posterior.
Reutilización de la variable: Una vez que una variable ha sido definida con let, puede ser utilizada en cualquier parte de la consulta posterior a su definición sin necesidad de recalcularse.
Inmutabilidad: Las variables definidas con let son inmutables, es decir, una vez establecidas con un valor, no pueden ser modificadas.
let $book:= doc("bookstrore.xml")/bookstore/book,
$autor_especifico := "Kurt Cagle"
FOR vincula una variable con cada nodo, $x se vincula en cada a cada uno de los resultados
for $x in doc("pokedex.xml")/pokedex/pokemon/nombre/english return <nombre> {$x/text()} </nombre>
<nombre> Bulbasaur </nombre>
<nombre> Ivysaur </nombre>
<nombre> Venusaur </nombre>
<nombre> Charmander </nombre>
LET vincula $x con todo el resultado de la expresión.
let $x := doc("pokedex.xml")/pokedex/pokemon/nombre/english return <nombre>{$x/text()} </nombre>
<nombre>
Bulbasaur
Ivysaur
Venusaur
</nombre>