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