| 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 |