XQuery Adding ElementsandAttributes


XML Example Document

We will continue to use this "books.xml" document in the examples below (the same XML file used in the previous chapters).

View the "books.xml" file in your browser。


Adding Elements and Attributes to Results

As we saw in the previous section, we can reference elements and attributes from the input file in the results:

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

The XQuery expression above will reference the title element and lang attribute in the results, like this:

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

The above XQuery expression returns the title elements in the same way they are described in the input document.

Now we want to add our own elements and attributes to the results!

Adding HTML Elements and Text

Now, we want to add HTML elements to the results. We will put the results in an HTML list:

<html>
<body>

<h1>Bookstore</h1>

<ul>
{
for $x in doc("books.xml")/bookstore/book
order by $x/title
return <li>{data($x/title)}. Category: {data($x/@category)}</li>
}
</ul>

</body>
</html>

The XQuery expression above will generate the following result:

<html>
<body>

<h1>Bookstore</h1>

<ul>
<li>Everyday Italian. Category: COOKING</li>
<li>Harry Potter. Category: CHILDREN</li>
<li>Learning XML. Category: WEB</li>
<li>XQuery Kick Start. Category: WEB</li>
</ul>

</body>
</html>

Adding Attributes to HTML Elements

Next, we will use the category attribute as the class attribute in the HTML list:

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

The XQuery expression above can generate the following result:

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