<xslTutorial creator="nicmila@idoox.com">
<index keywords='xsl:variable last()'/>

<description>The value of function last() depends on context. You can select the last element of given type (<stylesheet id='id2'/>). Difference between <stylesheet id='id3'/> and <stylesheet id='id4'/> is very instructive. In <stylesheet id='id3'/> the function is in template.The context is therefore a single chapter element. In <stylesheet id='id4'/> the function is in for-each element. The context is therefore all selected chapters.</description>

<xmlSource id="id1">
<chapter>Chapter A</chapter>
<chapter>Chapter B</chapter>
<chapter>Chapter C</chapter>
<chapter>Chapter D</chapter>
</xmlSource>

<attValues>
<value match=''></value>
</attValues>


 <xslStylesheet id="id2">
<xsl:variable name="totalChapters">
<xsl:value-of select="//chapter[last()]"/>
</xsl:variable>

<xsl:template match="/">
<xsl:value-of select="$totalChapters"/>
</xsl:template>
</xslStylesheet>

 <xslStylesheet id="id3">
<xsl:template match="/">
<TABLE>

<xsl:for-each select="//chapter">
<TR><TD><xsl:apply-templates select="."/></TD></TR>
</xsl:for-each>
</TABLE>
</xsl:template>
 
<xsl:template match="chapter">
<xsl:value-of select="."/>
<xsl:text>(last = </xsl:text>
<xsl:value-of select="last()"/>
<xsl:text>)</xsl:text>
</xsl:template>
</xslStylesheet>

<xslStylesheet id="id4">
<xsl:template match="/">
<TABLE>

<xsl:for-each select="//chapter">
<TR><TD>
<xsl:value-of select="."/>
<xsl:text>(last = </xsl:text>
<xsl:value-of select="last()"/>
<xsl:text>)</xsl:text></TD></TR>
</xsl:for-each>
</TABLE>
</xsl:template>
 
</xslStylesheet>

</xslTutorial>