position() Function |
Returns a number equal to the context position from the current context.
Inputs
None.
Output
A number equal to the position of the current node in the evaluation context.
Defined in
XPath section 4.1, Node Set Functions.
Examples
This example uses the position() function to determine the background color of the rows of a table. The background colors cycle through the options white, darkgray, and lightgreen. Here's the XML document we'll use:
    <?xml version="1.0"?>
    <list>
      <title>A few of my favorite albums</title>
      <listitem>A Love Supreme</listitem>
      <listitem>Beat Crazy</listitem>
      <listitem>Here Come the Warm Jets</listitem>
      <listitem>Kind of Blue</listitem>
      <listitem>London Calling</listitem>
      <listitem>Remain in Light</listitem>
      <listitem>The Joshua Tree</listitem>
      <listitem>The Indestructible Beat of Soweto</listitem>
    </list>
We'll use this stylesheet to generate our HTML document:
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:output method="html"/>

      <xsl:template match="/">
        <html>
          <head>
            <title>
              <xsl:value-of select="/list/title"/>
            </title>
          </head>
          <body>
            <h1>
              <xsl:value-of select="/list/title"/>
            </h1>
            <table border="1">
              <xsl:for-each select="/list/listitem">
                <xsl:variable name="background-color">
                  <xsl:choose>
                    <xsl:when test="position() mod 3 = 1">white</xsl:when>
                    <xsl:when test="position() mod 3 = 2">darkgray</xsl:when>
                    <xsl:otherwise>lightgreen</xsl:otherwise>
                  </xsl:choose>
                </xsl:variable>
                <tr bgcolor="{$background-color}">
                  <td>
                    <b><xsl:value-of select="."/></b>
                  </td>
                </tr>
              </xsl:for-each>
            </table>
          </body>
        </html>
      </xsl:template>

    </xsl:stylesheet>
Our stylesheet generates the following results:
    <html>
    <head>
    <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>A few of my favorite albums</title>
    </head>
    <body>
    <h1>A few of my favorite albums</h1>
    <table border="1">
    <tr bgcolor="white">
    <td><b>A Love Supreme</b></td>
    </tr>
    <tr bgcolor="darkgray">
    <td><b>Beat Crazy</b></td>
    </tr>
    <tr bgcolor="lightgreen">
    <td><b>Here Come the Warm Jets</b></td>
    </tr>
    <tr bgcolor="white">
    <td><b>Kind of Blue</b></td>
    </tr>
    <tr bgcolor="darkgray">
    <td><b>London Calling</b></td>
    </tr>
    <tr bgcolor="lightgreen">
    <td><b>Remain in Light</b></td>
    </tr>
    <tr bgcolor="white">
    <td><b>The Joshua Tree</b></td>
    </tr>
    <tr bgcolor="darkgray">
    <td><b>The Indestructible Beat of Soweto</b></td>
    </tr>
    </table>
    </body>
    </html>
When rendered, the HTML file looks like Figure C-8. HTML file displaying items with different background colors