這XSLT 1.0轉化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="pChunkSize" select="23"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text/text()" name="chunk">
<xsl:param name="pText" select="."/>
<xsl:if test="string-length($pText) >0">
<text><xsl:value-of select=
"substring($pText, 1, $pChunkSize)"/>
</text>
<xsl:call-template name="chunk">
<xsl:with-param name="pText"
select="substring($pText, $pChunkSize+1)"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
當所提供的XML文檔施加:
<tag>
<text>This is a long string 1This is a long string 2This is a long string 3This is a long string 4</text>
</tag>
產生想要的,正確的結果:
<tag>
<text>
<text>This is a long string 1</text>
<text>This is a long string 2</text>
<text>This is a long string 3</text>
<text>This is a long string 4</text>
<text/>
</text>
</tag>
二, XSLT 2.0溶液(非遞歸):
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="pChunkSize" select="23"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text/text()">
<xsl:variable name="vtheText" select="."/>
<xsl:for-each select=
"0 to string-length() idiv $pChunkSize">
<text>
<xsl:sequence select=
"substring($vtheText, . *$pChunkSize +1, $pChunkSize) "/>
</text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
有一噸的在SO約XSLT串分割的問題。關鍵字:「XSLT split」 –