Adicionar Elementos e Atributos no XQuery

Documento de exemplo XML

Continuaremos a usar o documento "books.xml" nos exemplos a seguir (e o arquivo XML usado nas seções anteriores).

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

Adicionar elementos e atributos ao resultado

Como vimos na seção anterior, podemos citar elementos e atributos do arquivo de entrada no resultado:

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

A expressão XQuery acima cita o elemento title e o atributo lang no resultado, assim:

<title lang="en">Italiano cotidiano</title>
<title lang="en">Harry Potter</title>
<title lang="en">Learning XML</title>
<title lang="en">XQuery Kick Start</title>

A maneira como a expressão XQuery acima retorna o elemento title é a mesma que a maneira como ele é descrito no documento de entrada.

Agora, vamos adicionar nossos próprios elementos e atributos aos resultados!

Adicionar elementos HTML e texto

Agora, vamos adicionar elementos HTML aos resultados. Colocaremos os resultados em uma 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)}. Categoria: {data($x/@category)}</li>
}
</ul>
</body>
</html>

A expressão XQuery acima gerará o seguinte resultado:

<html>
<body>
<h1>Bookstore</h1>
<ul>
<li>Italiano cotidiano. Categoria: CUCINA</li>
<li>Harry Potter. Categoria: CHILDREN</li>
<li>Learning XML. Categoria: WEB</li>
<li>XQuery Kick Start. Categoria: WEB</li>
</ul>
</body>
</html>

Adicionar Atributo ao Elemento HTML

A seguir, usaremos o atributo category como a propriedade class na 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>

A expressão XQuery acima pode gerar o seguinte 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>