XQuery speeds up the process of finding information contained in an XML document -- which is very handy when dealing with long XML documents. This article, the second of two parts, will teach you how to write XQuery expressions. It is excerpted from chapter nine of the book XML DeMYSTiFieD, written by Jim Keogh and Ken Davidson (McGraw-Hill/Osborne, 2005; ISBN: 0072262109).
XQuery, concluded - Retrieving the Value of an Attribute and the Attribute Name (Page 3 of 5 )
When you use the @ symbol followed by the attribute name without calling the data() function, an XQuery can return the name of the attribute, along with its value, as we illustrate here:
{$cd/@upc}
Figure 9-4.Here's how the UPC attribute appears when the output.html file is displayed in the browser.
Let’s modify the previous XQuery to display both the UPC attribute name and its value. Here’s the revised XQuery:
<html> <body> List of titles in this catalog:<br/> <table border="1"> <tr> <td>UPC</td> <td>Artist</td> <td>Title</td> </tr> { for $cd in doc("catalog.xml")/catalog/cd order by $cd/artist return <tr> <td>{$cd/@upc}</td> <td>{data($cd/artist)}</td> <td>{data($cd/title)}</td> </tr> } </table> </body> </html>
Here’s the new output.html file. Notice that the attribute appears just as it does in the XML document. It has the attribute name, equal sign, and the value. Saxon-B is smart enough to replace the " that's in the XML document in double quotations.
<html> <body> List of titles in this catalog:<br><table border="1"> <tr> <td>UPC</td> <td>Artist</td> <td>Title</td> </tr> <tr> <td upc="74646938720"></td> <td>Billy Joel</td> <td>Songs in the Attic</td> </tr> <tr> <td upc="74640890529"></td> <td>Bob Dylan</td> <td>The Times They Are A-Changin'</td> </tr> <tr> <td upc="8811160227"></td> <td>Jimi Hendrix</td> <td>Are You Experienced?</td> </tr> <tr> <td upc="75679244222"></td> <td>Led Zeppelin</td> <td>Physical Graffiti</td> </tr> <tr> <td upc="75678263927"></td> <td>Led Zeppelin</td> <td>Houses of the Holy</td> </tr> <tr> <td upc="75678367229"></td> <td>Rush</td> <td>Rush in Rio</td> </tr> <tr> <td upc="602498678299"></td> <td>U2</td> <td>How to Dismantle an Atomic Bomb</td> </tr> </table> </body> </html>
CAUTION Don’t place text or any node before the attribute because it will cause an error. For example, the following statement confuses Saxon-B because the attribute is in the wrong location. Attributes are assigned first and then followed by the text of the element.