Invoking Templates by Name
Up to this point, we’ve always used XSLT’s <xsl:apply-templates> element to invoke other templates. You can think of this as a limited form of polymorphism; a single instruction is invoked a number of times, and the XSLT processor uses each node in the node-set to determine which <xsl:template> to invoke. Most of the time, this is what we want. However, sometimes we want to invoke a particular template. XSLT allows us to do this with the <xsl:call-template> element.
How It Works
To invoke a template by name, two things have to happen:
The template you want to invoke has to have a
name.You use the
<xsl:call-template>element to invoke the named template.
Here’s how to do this. Say we have a template named createMasthead that creates the masthead of a web page. Whenever we create an HTML page for our web site, we want to invoke the createMasthead template to create the masthead. Here’s what our stylesheet would look like:
<xsl:template name="createMasthead">
<!-- interesting stuff that generates the masthead goes here -->
</xsl:template>
...
<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="title"/></title>
</head>
<body>
<xsl:call-template name="createMasthead"/>
...Named templates are extremely useful for defining commonly used markup. For example, say you’re using an XSLT stylesheet to create web pages with a particular look and feel. You can write named templates that create the header, footer, navigation areas, or other items that ...