Processing XQuery Results


Thus far I've focused solely on tweaking queries and returning the raw result, which is a collection of nodes. Realistically, you will often want to further process the results of a query to extract information from the nodes and transform it for display purposes or to pass along to another application or service. It's very straightforward to further process query results and package them within other surrounding XML code to effectively create transformed data. You can even transform query results into HTML code that can be viewed as a web page.

The key to incorporating query results into surrounding code is curly braces ({}), which you use to surround query data. Before you can do that, however, you need to know how to access the content within a node. You do this by calling the XQuery data() function and supplying it with the node in question. Following is an example of formatting a query result:

for $c in //color return <p>Vehicle color: {data($c)}</p>

When executed on the vehicle sample document, this code results in the following:

<?xml version="1.0" encoding="UTF-8"?> <p>Vehicle color: green</p> <p>Vehicle color: white</p> <p>Vehicle color: white</p>

As you can see, the value of each color element is extracted and included in a <p> tag that would be suitable for inclusion within an HTML document.

You can also process attributes directly from a query string to get more interesting results, as in the following query:

xquery version "1.0"; <p> Following are all of the white vehicles:<br /> { for $v in //vehicle[color='white'] return <div>{data($v/@year)} - {data($v/@make)} - {data($v/@model)}</div> } </p>

This code demonstrates how a query can be placed within other XML (XHTML) code by enclosing it in {}. The resulting XHTML code is then readily viewed within a web browser:

<?xml version="1.0" encoding="UTF-8"?> <p> Following are all of the white vehicles:<br/>    <div>2005 - Acura - 3.2TL</div>    <div>2004 - Acura - 3.2TL</div> </p>

One last trick for formatting queries involves the XQuery order by statement, which allows you to set the order of query results. Following is the same query you just saw, except this time the query results are ordered by price:

xquery version "1.0"; <p> Following are all of the white vehicles:<br /> { for $v in //vehicle[color='white'] order by $v/price return <div>{data($v/@year)} - {data($v/@make)} - {data($v/@model)}</div> } </p>

Because the price isn't shown in the output, this ordering isn't quite so meaningful in this particular example, but it will be as you explore more interesting examples a little later in the hour.




Sams Teach Yourself XML in 24 Hours
Sams Teach Yourself XML in 24 Hours, Complete Starter Kit (3rd Edition)
ISBN: 067232797X
EAN: 2147483647
Year: 2005
Pages: 266

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net