此XPath 2.0表達式:
string-join(for $line in tokenize(line,'
'),
$length in string-length($line)
return if ($length > $pMaxLength)
then substring(replace($line,
concat('(.{1,',
$pMaxLength,
'})'),
'$1
'),
1,
$length + ceiling($length div $pMaxLength) -1)
else $line,
'
')
對於測試,該輸入:
<line>
line1
line2 line2 line2 line2
line3line3
line4line4
line5line5line5line5line5
</line>
利用該XSLT樣式表2.0:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="pMaxLength" select="10"/>
<xsl:template match="/">
<xsl:value-of
select="string-join(
for $line in tokenize(line,'
'),
$length in string-length($line)
return if ($length > $pMaxLength)
then substring(replace($line,
concat('(.{1,',
$pMaxLength,
'})'),
'$1
'),
1,
$length +
ceiling($length div $pMaxLength) - 1)
else $line,
'
')"/>
</xsl:template>
</xsl:stylesheet>
輸出:
line1
line2 line
2 line2 li
ne2
line3line3
line4line4
line5line5
line5line5
line5
以防萬一,這個XSLT 1.0樣式:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="line/text()" name="lines">
<xsl:param name="pString" select="."/>
<xsl:param name="pMaxLength" select="10"/>
<xsl:choose>
<xsl:when test="contains($pString,'
')">
<xsl:call-template name="lines">
<xsl:with-param name="pString"
select="substring-before($pString,'
')"/>
<xsl:with-param name="pMaxLength"
select="$pMaxLength"/>
</xsl:call-template>
<xsl:call-template name="lines">
<xsl:with-param name="pString"
select="substring-after($pString,'
')"/>
<xsl:with-param name="pMaxLength"
select="$pMaxLength"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(substring($pString,1,$pMaxLength),
'
')"/>
<xsl:apply-templates
select="current()[string-length($pString) > $pMaxLength]">
<xsl:with-param name="pString"
select="substring($pString,$pMaxLength+1)"/>
<xsl:with-param name="pMaxLength" select="$pMaxLength"/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
@托馬斯 - 舒爾茨:你能不能,請提供完整的(但最少)的例子 - 源XML文檔(儘可能小)時,完整的XSLT樣式表(儘可能最小)以及將所提供的XSLT樣式表應用於提供的XML文檔時所需的結果?缺乏這些使得你的問題更多的是猜測而不是邏輯活動。請。 – 2010-09-20 21:07:51
對不起,我沒有及時檢查在那裏添加。亞歷杭德羅釘了它雖然。 – 2010-09-21 12:41:10