Nic Miloslav     Example 50    KEYWORDS      EXAMPLES      AUTHORS     

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 1 demonstrates use of these functions in several contexts. Stylesheet 2 compares sorted and unsorted xsl:for-each element.


     XML     HOME     XSL 1     XSL 2      
<xslTutorial >
<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>
</xslTutorial>

     XSL 1     HOME     XML     HTML 1     OUTPUT 1     
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<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>
</xsl:stylesheet>

     HTML 1     HOME     XML     XSL 1     OUTPUT 1     
<HTML>
<HEAD> </HEAD>
<BODY>
<DIV>BBB(1/5)(2/5)(3/5)(4/5)(5/5)</DIV>
<DIV>CCC(1/5)(2/5)(3/5)(4/5)(5/5)</DIV>
<DIV>CCC(1/4)(2/4)(3/4)(4/4)</DIV> </BODY> </HTML>

     OUTPUT 1     HOME     XML     XSL 1     HTML 1     
BBB(1/5)(2/5)(3/5)(4/5)(5/5)
CCC(1/5)(2/5)(3/5)(4/5)(5/5)
CCC(1/4)(2/4)(3/4)(4/4)

     XSL 2     HOME     XML     HTML 2     OUTPUT 2     
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
<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>
</xsl:stylesheet>

     HTML 2     HOME     XML     XSL 2     OUTPUT 2     
<HTML>
<HEAD> </HEAD>
<BODY>
<TABLE border="1">
<TR>
<TH>Position</TH>
<TH>Last</TH>
<TH>Name</TH></TR>
<TR>
<TD>1</TD>
<TD>4</TD>
<TD>John</TD></TR>
<TR>
<TD>2</TD>
<TD>4</TD>
<TD>Charles</TD></TR>
<TR>
<TD>3</TD>
<TD>4</TD>
<TD>Robert</TD></TR>
<TR>
<TD>4</TD>
<TD>4</TD>
<TD>Anthony</TD></TR></TABLE>
<TABLE border="1">
<TR>
<TH>Position</TH>
<TH>Last</TH>
<TH>Name</TH></TR>
<TR>
<TD>1</TD>
<TD>4</TD>
<TD>Anthony</TD></TR>
<TR>
<TD>2</TD>
<TD>4</TD>
<TD>Charles</TD></TR>
<TR>
<TD>3</TD>
<TD>4</TD>
<TD>John</TD></TR>
<TR>
<TD>4</TD>
<TD>4</TD>
<TD>Robert</TD></TR></TABLE> </BODY> </HTML>

     OUTPUT 2     HOME     XML     XSL 2     HTML 2     
PositionLastName
14John
24Charles
34Robert
44Anthony
PositionLastName
14Anthony
24Charles
34John
44Robert