Vanilla XSLT 1.0 может решить эту проблему путем рекурсии.
<xsl:template name="split">
<xsl:param name="list" select="''" />
<xsl:param name="separator" select="','" />
<xsl:if test="not($list = '' or $separator = '')">
<xsl:variable name="head" select="substring-before(concat($list, $separator), $separator)" />
<xsl:variable name="tail" select="substring-after($list, $separator)" />
<!-- insert payload function here -->
<xsl:call-template name="split">
<xsl:with-param name="list" select="$tail" />
<xsl:with-param name="separator" select="$separator" />
</xsl:call-template>
</xsl:if>
</xsl:template>
Существуют предварительно созданные библиотеки расширений, которые могут выполнять токенизацию строк (например, EXSLT имеет шаблон для этого), но я сомневаюсь, что это действительно необходимо.