2009-02-16 10 views
3

demandé si vous pouviez m'aider s'il vous plaît? J'ai noeud xml qui est comme suitSuppression de tous les caractères n r d'un noeud XSLT?

$ LOG: 08880xbpnd
$ fhdsafidsfsd
df
sd
FSD
f
sd
FSD

Je me demandais est là de toute façon à faire tout le texte aller sur une ligne de sorte qu'il peut ensuite être passé à travers une fonction javascript? il tournerait comme ça

$ LOG: 08880xbpnd fhdsafidsfsddfsdfsdfsdfsd $
+0

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() –

Répondre

11

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(.,'&#xA;','')"/> 
    </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> 
+0

+1 certainement une meilleure solution, si vous avez besoin de l'espace intérieur préservé. – andynormancx

7

La fonction normalize-space() XPath doit faire ce que vous voulez.

+0

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 de début et de fin et remplace tout groupe d'espaces intérieurs contigus par un seul espace. Une meilleure solution est d'utiliser translate() –

+0

Assez juste, mais sur le côté positif, l'exemple de questions n'a pas d'espace;) – andynormancx

Questions connexes