Cette expression 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,
'
')
Pour le test, cette entrée:
<line>
line1
line2 line2 line2 line2
line3line3
line4line4
line5line5line5line5line5
</line>
Avec cette XSLT 2.0 stylesheet:
<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>
Sortie:
line1
line2 line
2 line2 li
ne2
line3line3
line4line4
line5line5
line5line5
line5
Juste au cas où, ce XSLT 1.0 stylesheet:
<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>
@ Thomas-Schultz: Pourriez-vous, s'il vous plaît, donner un exemple complet (mais minime) - le document XML source (aussi minime que possible), la compléter la feuille de style XSLT (aussi minime que possible) et le résultat souhaité lorsque la feuille de style XSLT fournie est appliquée sur le document XML fourni? Le manque de ceux-ci rend le travail sur votre problème plus d'une conjecture que l'activité logique. S'il vous plaît. –
Désolé, je n'ai pas vérifié à temps pour ajouter cela là-dedans. Alejandro l'a cloué cependant. –