Relative and Absolute Expressions

page 45 document. Obviously, XML documents contain things other than elements; well talk about how to select those other things here.

3.2.4.1 Selecting attributes

To select an attribute, use the at-sign along with the attribute name. In our sample sonnet, you can select the type attribute of the sonnet element with the XPath expression sonnettype . If the context node is the sonnet element itself, then the relative XPath expression type does the same thing.

3.2.4.2 Selecting the text of an element

To select the text of an element, use the XPath node test text . The XPath expression sonnetauth:authorlast-nametext selects the text of the last-name element in our example document. Be aware that the text of an element is the concatenation of all of its text nodes. Thus, the XPath expression sonnetauth:authortext returns the following text: ShakespeareWilliamBritish15641616 Thats probably not the output you want; if you want to provide spacing, line breaks, or other formatting, you need to use the text node test against all the child nodes individually.

3.2.4.3 Selecting comments, processing instructions, and namespace nodes

By this point, weve covered most of the things youre ever likely to do with an XPath expression. You can use a couple of other XPath node tests to describe parts of an XML document. The comment and processing-instruction node tests allow you to select comments and processing instructions from the XML document. Going back to our sample sonnet, the XPath expression processing-instruction returns the two processing instructions named xml-stylesheet and cocoon-process . The expression sonnetcomment returns the comment node that begins, Is there an official title for this sonnet? Processing comment nodes in this way can actually be useful. If youve entered comments into an XML document, you can use the comment node test to display your comments only when you want. Heres an XSLT template you could use: xsl:template match=comment span class=comment pxsl:value-of select=.p span xsl:template Elsewhere in your stylesheet, you could define CSS attributes to print comments in a large, bold, purple font. To remove all comments from your output document, simply go to your stylesheet and comment out any xsl:apply-templates select=comment statements. XPath has one other kind of node, the rarely used namespace node. To retrieve namespace nodes, you have to use something called the namespace axis; well discuss axes soon. One note about namespace nodes, if you ever have to use them: When matching namespace nodes, the namespace prefix isnt important. As an example, our sample sonnet used the auth namespace prefix, which maps to the value http:www.authors.com . If a stylesheet uses the namespace prefix writers to refer to the same URL, then the XPath expression sonnetwriters:: would return the auth:author element. Even though the namespace prefixes are different, the URLs they refer to are the same. Having said all that, the chances that youll ever need to use namespace nodes are pretty slim.