1:<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   2:  version="1.0">
   3:
   4:<xsl:output indent="yes" method="xml"/>
   5:
   6:<xsl:template match="/">
   7:<testroot>
   8:    <xsl:call-template name="output-tokens">
   9:            <xsl:with-param name="list">1,2,3,4,5</xsl:with-param>
  10:            <xsl:with-param name="delimiter">,</xsl:with-param>
  11:    </xsl:call-template>
  12:</testroot></xsl:template>
  13:
  14:<xsl:template name="output-tokens">
  15:    <xsl:param name="list" />
  16:    <xsl:param name="delimiter" />
  17:    <xsl:variable name="newlist">
  18:        <xsl:choose>
  19:            <xsl:when test="contains($list, $delimiter)"><xsl:value-of select="normalize-space($list)" /></xsl:when>
  20:            
  21:            <xsl:otherwise><xsl:value-of select="concat(normalize-space($list), $delimiter)"/></xsl:otherwise>
  22:        </xsl:choose>
  23:    </xsl:variable>
  24:    <xsl:variable name="first" select="substring-before($newlist, $delimiter)" />
  25:    <xsl:variable name="remaining" select="substring-after($newlist, $delimiter)" />
  26:    <num><xsl:value-of select="$first" /></num>
  27:    <xsl:if test="$remaining">
  28:        <xsl:call-template name="output-tokens">
  29:            <xsl:with-param name="list" select="$remaining" />
  30:            <xsl:with-param name="delimiter"><xsl:value-of select="$delimiter"/></xsl:with-param>
  31:        </xsl:call-template>
  32:    </xsl:if>
  33:</xsl:template>
  34:</xsl:stylesheet>
  35:
  36: