Malheureusement, la fonction normalize-space()
(utilisée dans la réponse d'andynormancx) fait plus que supprimer les nouvelles lignes.
Il supprime tous les espaces de début et de fin et il remplace tout groupe d'espaces intérieurs contigus avec un caractère d'espace unique.
Dans de nombreux cas, nous voulons deleteonly un type d'un caractère blanc (comme dans le cas présent - de nouvelles lignes (CR + LF est automatiquement normalisée à la lecture par l'analyseur XML juste LF)
.
la manière correcte et sûre de le faire consiste à utiliser la norme XPath translate()
fonction:.
translate(., '
', '')
retourne une chaîne obtenue à partir de la chaîne de la valeur du nœud courant dans lequel un caractère de saut de ligne est supprimé
Voici un exemple:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of
select="translate(.,'
','')"/>
</xsl:template>
</xsl:stylesheet>
Lorsque la transformation ci-dessus est appliquée sur ce document XML source:
<t>
$LOG: 08880xbpnd $
"embedded blanks must stay"
df
sd
fsd
f
sd
fsd
</t>
Le résultat est sur une seule ligne, au besoin, et tous les espaces incorporés sont laissés intacts:
<t>$LOG: 08880xbpnd $"embedded blanks must stay"dfsdfsdfsdfsd</t>
Malheureusement, la fonction normalize-space() utilisée dans la réponse d'andynormancx fait plus que supprimer des nouvelles lignes. Il supprime tous les espaces avant et arrière et remplace tout groupe d'espaces intérieurs contigus par un espace unique. Une meilleure solution est d'utiliser translate() –