Nic Miloslav     Example 34    KEYWORDS      EXAMPLES      AUTHORS     

A stylesheet can contain several variables of the same name. Stylesheet 1 demonstrates a way how to recover the value of global variable which has the same name as a local one. The Stylesheet 2 demonstrates an incorrect approach. The value of local variable is bounded to xsl:when element. The rest of template therefore sees only the global variable.


     XML     HOME     XSL 1     XSL 2      
<xslTutorial >
<chapter>Chapter A</chapter>
<chapter>Chapter B</chapter>
<chapter>Chapter C</chapter>
<chapter>Chapter D</chapter>
</xslTutorial>

     XSL 1     HOME     XML     HTML 1     OUTPUT 1     
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<xsl:variable name="text">Chapter</xsl:variable>
<xsl:template match="/">
<TABLE>
<xsl:for-each select="//chapter">
<TR><TD>
<xsl:variable name="text">
<xsl:choose>
<xsl:when test='position() = 1'>First chapter</xsl:when>
<xsl:when test='position()=last()'>Last chapter</xsl:when>
<xsl:otherwise> <xsl:value-of select="$text"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$text"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="."/>
</TD></TR>
</xsl:for-each>
</TABLE>
</xsl:template>
</xsl:stylesheet>

     HTML 1     HOME     XML     XSL 1     OUTPUT 1     
<HTML>
<HEAD> </HEAD>
<BODY>
<TABLE>
<TR>
<TD>First chapter : Chapter A</TD></TR>
<TR>
<TD>Chapter : Chapter B</TD></TR>
<TR>
<TD>Chapter : Chapter C</TD></TR>
<TR>
<TD>Last chapter : Chapter D</TD></TR></TABLE> </BODY> </HTML>

     OUTPUT 1     HOME     XML     XSL 1     HTML 1     
First chapter : Chapter A
Chapter : Chapter B
Chapter : Chapter C
Last chapter : Chapter D

     XSL 2     HOME     XML     HTML 2     OUTPUT 2     
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<xsl:variable name="text">Chapter</xsl:variable>
<xsl:template match="/">
<TABLE>
<xsl:for-each select="//chapter">
<TR><TD>
<xsl:choose>
<xsl:when test='position() = 1'>
<xsl:variable name="text">First chapter</xsl:variable>
</xsl:when>
<xsl:when test='position()=last()'>
<xsl:variable name="text">Last chapter</xsl:variable>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="text"><xsl:value-of select="$text"/></xsl:variable>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="$text"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="."/>
</TD></TR>
</xsl:for-each>
</TABLE>
</xsl:template>
</xsl:stylesheet>

     HTML 2     HOME     XML     XSL 2     OUTPUT 2     
<HTML>
<HEAD> </HEAD>
<BODY>
<TABLE>
<TR>
<TD>Chapter : Chapter A</TD></TR>
<TR>
<TD>Chapter : Chapter B</TD></TR>
<TR>
<TD>Chapter : Chapter C</TD></TR>
<TR>
<TD>Chapter : Chapter D</TD></TR></TABLE> </BODY> </HTML>

     OUTPUT 2     HOME     XML     XSL 2     HTML 2     
Chapter : Chapter A
Chapter : Chapter B
Chapter : Chapter C
Chapter : Chapter D