[2.0] Range Expressions—The to Operator

To create sequences of integers, XPath 2.0 introduces the to operator. For example, here is a short stylesheet that creates a sequence of five integers and a reversed sequence of five integers, then prints the values of the sequences:

<?xml version="1.0"?>
<!-- to.xsl -->
<xsl:stylesheet version="2.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xsl:output method="text"/>
 
  <xsl:variable name="some-numbers" as="xs:integer*"
    select="1 to 5"/>

  <xsl:variable name="reversed-numbers" as="xs:integer*"
    select="reverse(1 to 5)"/>

  <xsl:template match="/">
    <xsl:value-of select="$some-numbers" separator=", "/>
    <xsl:text>
</xsl:text>
    <xsl:value-of select="$reversed-numbers" separator=", "/>
  </xsl:template>

</xsl:stylesheet>

The to operator creates only sequences of integers. If the second number is lower than the first (10 to 1, for example), the result is an empty sequence. If the second number is the same as the first (such as 10 to 10), the result is a sequence that contains that single integer.

Be aware that the to operator can be used as part of a larger sequence. For example, we could create the sequence (1 to 17, 65 to 100). Finally, if you need to create a sequence of numbers in descending order, you can use the [2.0] reverse() function (see Appendix C) to reverse the sequence of integers created with the to operator.

The results of this stylesheet look like this:

1, 2, 3, 4, 5
5, 4, 3, 2, 1

Get XSLT, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.