<xslTutorial creator="nicmila@idoox.com">
<index keywords='position() last() xsl:call-template xsl:sort'/>

<description>
The position function returns a number equal to the context position and the last function returns a number equal to the context size  from the expression evaluation context.<stylesheet id='id2'/> demonstrates use of these functions in several contexts. <stylesheet id='id3'/> compares sorted and unsorted xsl:for-each element.</description>

<xmlSource id="id1">
<AAA>
     <BBB>
          <CCC>Carl</CCC>
     </BBB>
     <BBB/>
     <BBB/>
</AAA>
<AAA>
     <BBB/>
     <BBB>           
          <CCC>John</CCC>
          <CCC>Charles</CCC>
                      <CCC>Robert</CCC>
          <CCC>Anthony</CCC>
     </BBB>
</AAA>
</xmlSource>

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

<xslStylesheet id="id2">
<xsl:template match="/">

<DIV>
<xsl:for-each select="//BBB">
<xsl:call-template  name="printout"/>
</xsl:for-each>
</DIV>

<DIV>
<xsl:apply-templates select="//CCC"/>
</DIV>

<DIV>
<xsl:apply-templates select="//AAA[last()]//CCC"/>
</DIV>

</xsl:template>

<xsl:template match="CCC">
<xsl:call-template name="printout"/>
</xsl:template>

<xsl:template name="printout">
<xsl:if test="position()=1">
<xsl:value-of select="name()"/>
</xsl:if>
<xsl:text>(</xsl:text>
<xsl:value-of select="position()"/>
<xsl:text>/</xsl:text>
<xsl:value-of select="last()"/>
<xsl:text>)</xsl:text>

</xsl:template>
</xslStylesheet>


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

<TABLE border='1'>
<TR><TH>Position</TH><TH>Last</TH><TH>Name</TH></TR>
<xsl:for-each select="//AAA[last()]//CCC">
<TR>
<TD><xsl:value-of select="position()"/></TD>
<TD><xsl:value-of select="last()"/></TD>
<TD><xsl:value-of select="text()"/></TD>
</TR>
</xsl:for-each>
</TABLE>

<TABLE  border='1'>
<TR><TH>Position</TH><TH>Last</TH><TH>Name</TH></TR>
<xsl:for-each select="//AAA[last()]//CCC">
<xsl:sort order="ascending" select="text()"/>
<TR>
<TD><xsl:value-of select="position()"/></TD>
<TD><xsl:value-of select="last()"/></TD>
<TD><xsl:value-of select="text()"/></TD>
</TR>
</xsl:for-each>
</TABLE>
</xsl:template>

</xslStylesheet>
</xslTutorial>