Agregar elementos y atributos en XQuery

Documento de ejemplo XML

En los siguientes ejemplos continuaremos utilizando este documento "books.xml" (y el archivo XML utilizado en el capítulo anterior).

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

Agregar elementos y atributos a los resultados

Como vimos en el capítulo anterior, podemos mencionar 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 anterior menciona los elementos title y la propiedad lang en los resultados, al igual que en el siguiente ejemplo:

<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 anterior 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>Librería</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 anterior generará el siguiente resultado:

<html>
<body>
<h1>Librería</h1>
<ul>
<li>Cocina Italiana cotidiana. Categoría: COCINA</li>
<li>Harry Potter. Categoría: CHILDREN</li>
<li>Learning XML. Categoría: WEB</li>
<li>XQuery Kick Start. Categoría: WEB</li>
</ul>
</body>
</html>

Agregar atributo a elemento HTML

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

<html>
<body>
<h1>Librería</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 anterior puede generar los siguientes resultados:

<html>
<body>
<h1>Librería</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>