Walking Through Our Example

page 27 Because our stylesheet is an XML document were really harping on that, arent we?, we have to end the h1 , body , and html elements here. At this point, were done with this template, so control returns to the template that invoked us. 7. Now were back in the template for the root element. Weve processed all the greeting elements, so were finished with this template. 8. No more elements are in the current context there is only one root element, so the XSLT processor is done.

2.4 Stylesheet Structure

As the final part of our introduction to XSLT, well look at the contents of the stylesheet itself. Well explain all the things in our stylesheet and discuss other approaches we could have taken.

2.4.1 The xsl:stylesheet Element

The xsl:stylesheet element is typically the root element of an XSLT stylesheet. xsl:stylesheet xmlns:xsl=http:www.w3.org1999XSLTransform version=1.0 First of all, the xsl:stylesheet element defines the version of XSLT were using, along with a definition of the xsl namespace. To be compliant with the XSLT specification, your stylesheet should always begin with this element, coded exactly as shown here. Some stylesheet processors, notably Xalan, issue a warning message if your xsl:stylesheet element doesnt have these two attributes with these two values. For all examples in this book, well start the stylesheet with this exact element, defining other namespaces as needed.

2.4.2 The xsl:output Element

Next, we specify the output method. The XSLT specification defines three output methods: xml , html , and text . Were creating an HTML document, so HTML is the output method we want to use. In addition to these three methods, an XSLT processor is free to define its own output methods, so check your XSLT processors documentation to see if you have any other options. xsl:output method=html A variety of attributes are used with the different output methods. For example, if youre using method=xml , you can use doctype-public and doctype-system to define the public and system identifiers to be used in the the document type declaration. If youre using method=xml or method=html , you can use the indent attribute to control whether or not the output document is indented. The discussion of the xsl:output element in Appendix A has all the details.

2.4.3 Our First xsl:template

Our first template matches , the XPath expression for the documents root element. xsl:template match= xsl:apply-templates select=greeting xsl:template page 28

2.4.4 The xsl:template for greeting Elements

The second xsl:template element processes any greeting elements in our XML source document. xsl:template match=greeting html body h1 xsl:value-of select=. h1 body html xsl:template

2.4.5 Built-in Template Rules

Although most stylesheets well develop in this book explicitly define how various XML elements should be transformed, XSLT does define several built-in template rules that apply in the absence of any specific rules. These rules have a lower priority than any other templates, so theyre always overridden when you define your own templates. The built-in templates are listed here.

2.4.5.1 Built-in template rule for element and root nodes

This template processes the root node and any of its children. This processing ensures that recursive processing will continue, even if no template is declared for a given element. xsl:template match=| xsl:apply-templates xsl:template This means that if the structure of a document looks like this: ?xml version=1.0? x y z y z The built-in template rule for element and root nodes means that we could write a template with match=z and the z element will still be processed, even if there are no template rules for the x and y elements.

2.4.5.2 Built-in template rule for modes

This template ensures that element and root nodes are processed, regardless of any mode that might be in effect. See Section 4.3.2 in Chapter 4 for more information on the mode attribute. xsl:template match=| mode=x xsl:apply-templates mode=x xsl:template

2.4.5.3 Built-in template rule for text and attribute nodes

This template copies the text of all text and attribute nodes to the output tree. Be aware that you have to actually select the text and attribute nodes for this rule to be invoked. xsl:template match=text| xsl:value-of select=. xsl:template