Agregar elementos y atributos de XQuery

Documento de ejemplo XML

Vamos a continuar usando el documento "books.xml" en los siguientes ejemplos (el mismo archivo XML que se utilizó en los capítulos anteriores).

Vea el archivo "books.xml" en su navegador.

Agregar elementos y atributos al resultado

Como se vio en la sección anterior, podemos referirnos a los elementos y atributos del archivo de entrada en los resultados:

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

La expresión XQuery referenciará los elementos title y el atributo lang de la siguiente manera:

<title lang="en">Everyday Italian</title>
<title lang="en">Harry Potter</title>
<title lang="en">Learning XML</title>
<title lang="en">XQuery Kick Start</title>

La forma en que la expresión XQuery devuelve los elementos title es idéntica a la forma en que se describen en el documento de entrada.

Ahora, agregaremos nuestros propios elementos y atributos a los resultados!

Agregar elementos HTML y texto

Ahora, agregaremos elementos HTML a los resultados. Pondremos los resultados en una lista HTML:

<html>
<body>
<h1>Bookstore</h1>
<ul>
{
for $x in doc("books.xml")/bookstore/book
order by $x/title
return <li>{data($x/title)}. Categoría: {data($x/@category)}</li>
}
</ul>
</body>
</html>

La expresión XQuery generará el siguiente resultado:

<html>
<body>
<h1>Bookstore</h1>
<ul>
<li>Everyday Italian. Categoría: COCINA</li>
<li>Harry Potter. Categoría: INFANTIL</li>
<li>Learning XML. Categoría: WEB</li>
<li>XQuery Kick Start. Categoría: WEB</li>
</ul>
</body>
</html>

Agregar atributos a los elementos HTML

A continuación, utilizaremos el atributo category como atributo class en la lista HTML:

<html>
<body>
<h1>Bookstore</h1>
<ul>
{
for $x in doc("books.xml")/bookstore/book
order by $x/title
return <li class="{data($x/@category)}">{data($x/title)}</li>
}
</ul>
</body>
</html>

La expresión XQuery generará el siguiente resultado:

<html>
<body>
<h1>Bookstore</h1>
<ul>
<li class="COOKING">Everyday Italian</li>
<li class="CHILDREN">Harry Potter</li>
<li class="WEB">Learning XML</li>
<li class="WEB">XQuery Kick Start</li>
</ul>
</body>
</html>