| SAXONICA | 
The xsl:template element defines a processing rule for source elements or other nodes of a
            particular type.
         
The type of node to be processed is identified by a pattern, written in the
            mandatory match attribute. The most common form of pattern is simply an
            element name. However, more complex patterns may also be used:
            The syntax of patterns is given in more detail in XSLT Pattern Syntax
The following examples show some of the possibilities:
| 
                   Pattern  | 
               
                   Meaning  | 
            
| 
                   XXX  | 
               
                   Matches any element whose name (tag) is XXX  | 
            
| 
                   *  | 
               
                   Matches any element  | 
            
| 
                   XXX/YYY  | 
               
                   Matches any YYY element whose parent is an XXX  | 
            
| 
                   XXX//YYY  | 
               
                   Matches any YYY element that has an ancestor named XXX  | 
            
| 
                   /*/XXX  | 
               
                   Matches any XXX element that is immediately below the root (document) element  | 
            
| 
                   *[@ID]  | 
               
                   Matches any element with an ID attribute  | 
            
| 
                   XXX[1]  | 
               
                   Matches any XXX element that is the first XXX child of its parent element. (Note that this kind of pattern can be very inefficient: it is better to match all XXX elements with a single template, and then use xsl:if to distinguish them)  | 
            
| 
                   SECTION[TITLE="Contents"]  | 
               
                   Matches any SECTION element whose first TITLE child element has the value "Contents"  | 
            
| 
                   A/TITLE | B/TITLE | C/TITLE  | 
               
                   Matches any TITLE element whose parent is of type A or B or C  | 
            
| 
                   text()  | 
               
                   Matches any character data node  | 
            
| 
                   @*  | 
               
                   Matches any attribute  | 
            
| 
                   /  | 
               
                   Matches the document node  | 
            
The xsl:template element has an optional mode attribute. If this is present, the template
            will only be matched when the same mode is used in the invoking xsl:apply-templates element.
            The value can be a list of mode names, indicating that the template matches more than one mode; this list
            can include the token #default to indicate that the template matches the default (unnamed)
            mode. Alternatively the mode attribute can be set to #all, to indicate that the
            template matches all modes. (This can be useful in conjunction with xsl:next-match: one
            can write a template rule that matches in all modes, and then call xsl:next-match to continue
            processing in the original mode.)
         
There is also an optional name attribute. If this is present, the template may be invoked
            directly using xsl:call-template. The match attribute then becomes optional.
         
If there are several xsl:template elements that all match the same
            node, the one that is chosen is determined by the optional priority attribute: the template
            with highest priority wins. The priority is written as a floating-point number; the default priority
            is 1. If two matching templates have the same priority, the one that appears last in the stylesheet
            is used.
         
Examples:
The following examples illustrate different kinds of template and match pattern.
Example 1: a simple XSLT template for a particular element. This example causes all <ptitle> elements in the source document to be output as HTML <h2> elements.
<xsl:template match="ptitle">
    <h2>
        <xsl:apply-templates/>
    </h2>
</xsl:template>