| 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>