2016-06-19 2 views
0

Je suis vraiment désolé pour l'orthographe ... Je n'ai jamais fait de XSL J'ai un XML que j'ai sais pas en entrée et j'essaie de remplacer l'espace double par l'espace, tabulations d'un espace et supprimer \ n et \ r avec XSLComment remplacer les espaces doubles par un espace, les tabulations par un espace et supprimer n et r avec XSL

J'ai vu sur Internet normaliser-espace() ou traduire mais je ne suis pas sûr que c'est the solution ...

Pourriez-vous m'aider?

Merci

Un exemple de fichier XML pourrait être:

<?xml version="1.0" encoding="UTF-8"?> 
    <input> 
     something with  
a lot of space and new lines 
    </input> 
    <input2> 
     <subInput2> 
     something with  
a lot of space and new lines 
     </subInput2> 
    </input2> 
+0

L'exemple est pauvre, car il est pas XML (plusieurs éléments racine). –

Répondre

1

Pour normalisent des espaces dans tous les nœuds de texte du document XML, faire:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="text()" priority="1"> 
    <xsl:value-of select="normalize-space()"/> 
</xsl:template> 

</xsl:stylesheet> 

Notez que cela ne modifie pas le texte dans les attributs. Si vous voulez ces à traiter aussi, faire:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="@*"> 
    <xsl:attribute name="{name()}"> 
     <xsl:value-of select="normalize-space()"/> 
    </xsl:attribute> 
</xsl:template> 

<xsl:template match="text()" priority="1"> 
    <xsl:value-of select="normalize-space()"/> 
</xsl:template> 

</xsl:stylesheet> 
+0

Merci beaucoup! – ArnaudTheDevelopper

1

Oui, normaliser l'espace() est la voie à suivre .. son valable dans toutes les versions de xslt. Voir http://www.w3schools.com/xsl/xsl_functions.asp pour plus de détails.

Je dois vraiment ajouter que dans xml l'espace supplémentaire est ignoré de la même manière qu'en html sauf si vous avez explicitement défini les options à < xsl: preserve-space>. Donc, je dirais que - en règle générale - vous n'avez pas toujours besoin d'utiliser normalize-space() partout où vous voyez un espace supplémentaire.

exemple:

entrée

:

<?xml version="1.0" encoding="UTF-8"?> 
    <input> 

     something with  
a lot of space and new lines 

    </input> 

xsl realy simple:

<xsl:template match="/"> 
    <result> 
     <xsl:value-of select="normalize-space(.)"/> 
    </result> 
</xsl:template> 

Résultat:

<result>something with a lot of space</result> 
+0

Merci pour la réponse, après avoir lu le lien donné il me semble que normalize-space() ne peut pas supprimer \ n et \ r dans le fichier, est-ce exact? – ArnaudTheDevelopper

+0

J'ai ajouté un exemple très simple. Si votre scénario est différent, veuillez publier un exemple dans la question. –