Testing the Position
In addition to applying conditions to location paths, you can actually choose to select a specific node in the node set: the first, second, or even the last.
To test a node’s position:
- Type position() = n, where n is the number that identifies the position of the node within the current node set (Figure 4.3).
x s l t ... <p>These ancient wonders are <xsl:for-each select= "ancient_wonders/wonder/name [@language='English']"> <xsl:value-of select="."/> <xsl:choose> <xsl:when test= "position()=last()">.</xsl:when> <xsl:when test= "position()=last()-1">, and </xsl:when> <xsl:otherwise>, </xsl:otherwise> </xsl:choose> </xsl:for-each> </p> ...
Figure 4.3. Here I am using position functions to format a sentence that lists all the wonders. The wonder’s name is output no matter what. If it’s in the last position, a period is also output after the name. If it’s in the second-to-last position (position() = last()–1), a comma, the word and, and a space are output after the name. Otherwise, if it’s in any other position, only the name and a space are output.
Figure 4.4 The output from the transformation based on Figure 4.3 shows the list of the seven wonders, well-formatted with commas separating the names and a final and before the last wonder.
To find the last node in a node set:
- Type last() to get the last node.