Creating Section Headers


We'll now look at the template rules used to format the section headers. These all have the same structure, and they reuse components we have already seen: the named anchor template that generates the target of a hyperlink, and the divnum mode that produces the section number for any given section. Here are the first two:

  <xsl:template match="div1/head">   <h2>   <xsl:call-template name="anchor">   <xsl:with-param name="conditional" select="0"/>   <xsl:with-param name="node" select=".."/>   </xsl:call-template>   <xsl:apply-templates select=".." mode="divnum"/>   <xsl:apply-templates/>   </h2>   </xsl:template>   <xsl:template match="div2/head">   <h3>   <xsl:call-template name="anchor">   <xsl:with-param name="conditional" select="0"/>   <xsl:with-param name="node" select=".."/>   </xsl:call-template>   <xsl:apply-templates select=".." mode="divnum"/>   <xsl:apply-templates/>   </h3>   </xsl:template>  

It would be entirely possible to use a single generic template by replacing the literal result element < h N > with the construct:

  <xsl:element name="{replace(name(..), 'div', 'h')}">  

This uses the XPath 2.0 replace() function, but the same logic could be written almost as easily by using XPath 1.0 functions such as concat() and substring-after() . Another way to avoid repetition of code between these templates would be to write separate template rules at the top level, and call a common component to produce the inner content:

  <xsl:template match="div1/head">   <h2>   <xsl:apply-templates select="." mode="head"/>   </h2>   </xsl:template>   <xsl:template match="div2/head">   <h3>   <xsl:apply-templates select="." mode="head"/>   </h3>   </xsl:template>   <xsl:template match="head" mode="head">   <xsl:call-template name="anchor">   <xsl:with-param name="conditional" select="0"/>   <xsl:with-param name="node" select=".."/>   </xsl:call-template>   <xsl:apply-templates select=".." mode="divnum"/>   <xsl:apply-templates/>   </xsl:template>  

Yet another approach would be for the common template rule to be invoked using <xsl: next -match/> rather than by using a separate mode.




XSLT 2.0 Programmer's Reference
NetBeansв„ў IDE Field Guide: Developing Desktop, Web, Enterprise, and Mobile Applications (2nd Edition)
ISBN: 764569090
EAN: 2147483647
Year: 2003
Pages: 324

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net