In XSLT 2.0/XPath 2.0 use the standard XPath 2.0 function tokenize().
In XSLT 1.0 one needs either to write a recursively called template or, more conveniently, use the str-split-to-words
function/template of the FXSL library.
Here is an example of the latter:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common"
>
<!-- -->
<xsl:import href="strSplit-to-Words.xsl"/>
<!-- -->
<xsl:output indent="yes" omit-xml-declaration="yes"/>
<!-- -->
<xsl:template match="/*">
<xsl:variable name="vwordNodes">
<xsl:call-template name="str-split-to-words">
<xsl:with-param name="pStr" select="string(@value)"/>
<xsl:with-param name="pDelimiters"
select="', '"/>
</xsl:call-template>
</xsl:variable>
<!-- -->
<xsl:apply-templates select="ext:node-set($vwordNodes)/*"/>
</xsl:template>
<!-- -->
<xsl:template match="word" priority="10">
<a href="x.asp?item={.}"><xsl:value-of select="."/></a>
</xsl:template>
<!-- -->
</xsl:stylesheet>
When the above transformation is applied on the provided XML document:
<item value="category1,category2">Item Name</item>
the wanted result is produced:
<a href="x.asp?item=category1" xmlns:ext="http://exslt.org/common">category1</a>
<a href="x.asp?item=category2" xmlns:ext="http://exslt.org/common">category2</a>
The pDelimiters
parameter of this template allow multiple delimiting characters to be specified. In the above example, any separating character can be either a comma, a space or a new line character.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…