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 |
---|
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 |
---|
Position | Last | Name |
---|---|---|
1 | 4 | John |
2 | 4 | Charles |
3 | 4 | Robert |
4 | 4 | Anthony |
Position | Last | Name |
---|---|---|
1 | 4 | Anthony |
2 | 4 | Charles |
3 | 4 | John |
4 | 4 | Robert |