title: XSLT Position()
body: <p>I have the following XML data, and process HTML using XSLT processor.</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-16"?&gt;
  &lt;ScorecardSummary&gt;
    &lt;DivisionSummary&gt;
      &lt;DivisionName&gt;
        &lt;string&gt; SYSTEM&lt;/string&gt;
      &lt;/DivisionName&gt;
      &lt;ScorecardSummaryByDivision&gt;
        &lt;ScorecardSummaryByKPI&gt;
          &lt;Header&gt;
            &lt;string&gt;Committed Time of Arrival&lt;/string&gt;
            &lt;string&gt;Goal&lt;/string&gt;
            &lt;string&gt;1D&lt;/string&gt;
            &lt;string&gt;7D&lt;/string&gt;
            &lt;string&gt;QTD&lt;/string&gt;
            &lt;string&gt;YTD&lt;/string&gt;
            &lt;string&gt;YTD Event Cars&lt;/string&gt;
          &lt;/Header&gt;
          &lt;Data&gt;
            &lt;ScorecardContract&gt;
              &lt;TypeName&gt;System&lt;/TypeName&gt;
              &lt;Goal&gt;68&lt;/Goal&gt;
              &lt;GoalWarning&gt;64.6&lt;/GoalWarning&gt;
              &lt;TotalCountYear&gt;1234&lt;/TotalCountYear&gt;
              &lt;Value1D&gt;79&lt;/Value1D&gt;
              &lt;Value7D&gt;79.2&lt;/Value7D&gt;
              &lt;ValueQTD&gt;79.1&lt;/ValueQTD&gt;
              &lt;ValueYTD&gt;73.3&lt;/ValueYTD&gt;
            &lt;/ScorecardContract&gt;
            &lt;ScorecardContract&gt; 
               &lt;!-- more data --&gt;
            &lt;/ScorecardContract&gt;
         &lt;/Data&gt;
        &lt;/ScorecardSummaryByKPI&gt;
        &lt;ScorecardSummaryByKPI&gt;
           &lt;!-- more data --&gt;
       &lt;/ScorecardSummaryByKPI&gt;
      &lt;/ScorecardSummaryByDivision&gt;
    &lt;/DivisionSummary&gt;
  &lt;/ScorecardSummary&gt;
  </code></pre>
  
  <p>I create tables according to the Data section of ScorecardSummaryByKPI part, and the headers of the tables match the Header section of ScorecardSummaryByKPI part.</p>
  
  <p>Here is the XSL:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;
  &lt;xsl:output method="html"/&gt;
  
  &lt;xsl:template match="/"&gt;
    &lt;html&gt;
      &lt;body&gt;
          &lt;xsl:apply-templates select="ScorecardSummary/DivisionSummary"&gt;
          &lt;/xsl:apply-templates&gt;
      &lt;/body&gt;
    &lt;/html&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="ScorecardSummary/DivisionSummary/DivisionName"&gt;
    &lt;h1&gt;
      &lt;xsl:value-of select="current()/string"/&gt;
    &lt;/h1&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="ScorecardSummaryByDivision"&gt;
    &lt;xsl:apply-templates select="current()/ScorecardSummaryByKPI"/&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="ScorecardSummaryByKPI"&gt;
    &lt;table border="1" cellspacing="0" cellpadding="5"&gt;
      &lt;xsl:apply-templates select="current()/Header"/&gt;
      &lt;xsl:apply-templates select="current()/Data"/&gt;
    &lt;/table&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="Header"&gt;
    &lt;tr&gt;
      &lt;TH bgcolor="#000066" width="250" height="30" style="color:white"&gt;
        &lt;xsl:value-of select="string[1]"/&gt;
      &lt;/TH&gt;
      &lt;TH bgcolor="#000066" height="30" style="color:white"&gt;
        &lt;xsl:value-of select="string[2]"/&gt;
      &lt;/TH&gt;
      &lt;TH bgcolor="#000066" height="30" style="color:white"&gt;
        &lt;xsl:value-of select="string[3]"/&gt;
      &lt;/TH&gt;
      &lt;TH bgcolor="#000066" height="30" style="color:white"&gt;
        &lt;xsl:value-of select="string[4]"/&gt;
      &lt;/TH&gt;
      &lt;TH bgcolor="#000066" height="30" style="color:white"&gt;
        &lt;xsl:value-of select="string[5]"/&gt;
      &lt;/TH&gt;
      &lt;TH bgcolor="#000066" height="30" style="color:white"&gt;
        &lt;xsl:value-of select="string[6]"/&gt;
      &lt;/TH&gt;
    &lt;/tr&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="Data"&gt;
    &lt;xsl:for-each select="current()/ScorecardContract"&gt;
      &lt;xsl:variable name="i" select="position()"/&gt;
      &lt;tr&gt;
        &lt;xsl:apply-templates select="TypeName"/&gt;
        &lt;xsl:apply-templates select="Goal"/&gt;
        &lt;xsl:apply-templates select="Value1D"/&gt;
        &lt;xsl:apply-templates select="Value7D"/&gt;
        &lt;xsl:apply-templates select="ValueQTD"/&gt;
        &lt;xsl:apply-templates select="ValueYTD"/&gt;
      &lt;/tr&gt;
    &lt;/xsl:for-each&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="TypeName"&gt;
    &lt;xsl:choose&gt;
      &lt;xsl:when test="self::node()[text()='System'] | self::node()[text()='Checkpoint']"&gt;
        &lt;td bgcolor="lightgray" style="font-weight:bold"&gt;
          &lt;xsl:value-of select="."/&gt;
        &lt;/td&gt;
      &lt;/xsl:when&gt;
      &lt;xsl:otherwise&gt;
        &lt;td&gt;
          &lt;xsl:value-of select="."/&gt;
        &lt;/td&gt;
      &lt;/xsl:otherwise&gt;
    &lt;/xsl:choose&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="Goal"&gt;
    &lt;td bgcolor="lightgray"&gt;
      &lt;xsl:value-of select="format-number(.,'###,##%')"/&gt;
    &lt;/td&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="Value1D"&gt;
    &lt;xsl:choose&gt;
      &lt;xsl:when test="position() != 3"&gt; &lt;!-- Here where I went wrong --&gt;
        &lt;td bgcolor="lightgreen"&gt;&lt;xsl:value-of select="."/&gt;&lt;/td&gt;
      &lt;/xsl:when&gt;
      &lt;xsl:otherwise&gt;
        &lt;td bgcolor="green"&gt;
          &lt;xsl:value-of select="."/&gt;
        &lt;/td&gt;
      &lt;/xsl:otherwise&gt;
    &lt;/xsl:choose&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="Value7D"&gt;
    &lt;td bgcolor="lightgreen"&gt;&lt;xsl:value-of select="."/&gt;&lt;/td&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="ValueQTD"&gt;
    &lt;td bgcolor="lightgreen"&gt;&lt;xsl:value-of select="."/&gt;&lt;/td&gt;
  &lt;/xsl:template&gt;
  
  &lt;xsl:template match="ValueYTD"&gt;
    &lt;td bgcolor="lightgray"&gt;&lt;xsl:value-of select="."/&gt;&lt;/td&gt;
  &lt;/xsl:template&gt;
  
  &lt;/xsl:stylesheet&gt;
  </code></pre>
  
  <p>Totally 6 tables are generated.
  My question is:</p>
  
  <p>How can I mark the tables, in order to generate different styles? 
  For example how to change styles for the third table?</p>