XQuery adding elements and attributes
XML Example Document
We will continue to use this "books.xml" document in the following examples (the same XML file used in the above chapters).
View the "books.xml" file in your browser.
Add elements and attributes to results
As seen in the previous section, we can reference elements and attributes from the input file in the results:
order by $x
return $x
The above XQuery expression will Reference the title element and lang attribute in the result, 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 title elements in the same way as they are described in the input document.
Now we want to add our own elements and attributes to the result!
Add HTML elements and text
Now, we want to add HTML elements to the results. We'll 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 above XQuery expression will generate the following results:
<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 need to use the category attribute as a 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 produces the following results:
<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>