IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XML/XSL et SOAP Discussion :

condition xslt remplace d'un caractère par un autre


Sujet :

XML/XSL et SOAP

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut condition xslt remplace d'un caractère par un autre
    Bonjour,

    J'aurais une petite question pour les connaisseurs. Est-il possible avec mon xslt de regarder dans mes balises xml si il y a des retours chariots et si oui les remplacer par un autre caractère par exemple "¤¤" ?

    Je vous remercie d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Possible oui.

    Mais en XLST 1.0 sans EXSLT, facile non.

    Le problème, c'est pour modifier le texte. La seule manière de faire est d'appeler un template récursif sur le texte à modifier, qui va chercher s'il y a un retour chariot dedans.
    Si non, le texte est renvoyé tel quel.
    Si oui, utilisation de substring-before() et substring-after() pour séparer avant le premier retour chariot et après. Le texte renvoyé est ce qu'il y a avant, suivi des caractères de remplacement, suivi de l'appel récursif sur ce qu'il y a après.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Possible oui.

    Mais en XLST 1.0 sans EXSLT, facile non.

    Le problème, c'est pour modifier le texte. La seule manière de faire est d'appeler un template récursif sur le texte à modifier, qui va chercher s'il y a un retour chariot dedans.
    Si non, le texte est renvoyé tel quel.
    Si oui, utilisation de substring-before() et substring-after() pour séparer avant le premier retour chariot et après. Le texte renvoyé est ce qu'il y a avant, suivi des caractères de remplacement, suivi de l'appel récursif sur ce qu'il y a après.
    Je te remercie de ta réponse
    Aurais-tu un exemple type afin que je puisse m'en inspiré ou débuter s'il te plait?

  4. #4
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut translate
    j'ai effectué cette manip mais apparemment ça ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:variable name="response"  select="."/>
    <xsl:value-of select="translate($responses,'
    ','non')"/>

  5. #5
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut remplace le retour chariot par un ¤
    j'ai réussi à remplacer le retour chariot par un autre caractère qui est ¤ voici le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:value-of select="translate(.,'
    ','¤¤')"/>
    si vous avez d'autre proposition de code pour faire cela je suis preneur

  6. #6
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    La fonction translate travaille caractère par caractère. C'est quelque chose dont on (moi en tout cas) n'a pas vraiment l'habitude en programmation :
    1
    2
    translate(..., '
    ', 'non')
    signifie :
    - remplace le caractère '\r' par 'n'.
    - remplace le caractère '\n' par 'o'.
    le dernier 'n' est ignoré car il ne correspond à aucun caractère en entrée.

    Malheureusement en XPath 1.0 c'est la seule fonction de remplacement qui existe. Pour remplacer un string (resp. un ou plusieurs caractère(s)) par un autre (resp. plusieurs ou un caractère(s)), il te faut passer par un template récursif. Ce n'est pas bien compliqué mais c'est relativement lourd.

  7. #7
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par Loceka Voir le message
    La fonction translate travaille caractère par caractère. C'est quelque chose dont on (moi en tout cas) n'a pas vraiment l'habitude en programmation :
    1
    2
    translate(..., '
    ', 'non')
    signifie :
    - remplace le caractère '\r' par 'n'.
    - remplace le caractère '\n' par 'o'.
    le dernier 'n' est ignoré car il ne correspond à aucun caractère en entrée.

    Malheureusement en XPath 1.0 c'est la seule fonction de remplacement qui existe. Pour remplacer un string (resp. un ou plusieurs caractère(s)) par un autre (resp. plusieurs ou un caractère(s)), il te faut passer par un template récursif. Ce n'est pas bien compliqué mais c'est relativement lourd.
    Ah d'accord pourrais-tu me montrer comment procède t-on pour faire un template récursif ( je suis débutant en xslt )
    Fichiers attachés Fichiers attachés

  8. #8
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Un template récursif est un template nommé (template name="..." et non template match="...") qui s'appelle lui-même (call-template). Tu trouveras un exemple ici : http://xml.developpez.com/faq/?page=3#xslt_compteur.

    Dans ton cas il faudra utiliser substring-before(...) et substring-after(...) pour découper ta chaîne aux bons endroits et la passer au template "suivant".
    Pour info, il existe déjà sur le net des bouts de code qui font cette opération.

  9. #9
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut remplace le retour chariot par un ¤
    j'ai trouvé un code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <xsl:template name="string-replace">
    				<xsl:param name="str" />
    				<xsl:param name="search" />
    				<xsl:param name="replace" />
    				<xsl:choose>
    					<xsl:when test="$search and contains($str, $search)">
    						<xsl:value-of select="substring-before($str, $search)" />
    						<xsl:value-of select="$replace" />
    						<xsl:call-template name="string-replace">
    							<xsl:with-param name="str" select="substring-after($str, $search)" />
    							<xsl:with-param name="search" select="$search" />
    							<xsl:with-param name="replace" select="$replace" />	
    						</xsl:call-template>
    					</xsl:when>
    					<xsl:otherwise>
    						<xsl:value-of select="$str" />
    					</xsl:otherwise>
    				</xsl:choose>
    			</xsl:template>
    serait-ce le bonne exemple?
    Si oui il faut le placer avant le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="/">
    Comment définit-on les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:param name="str" />
    <xsl:param name="search" />
    <xsl:param name="replace" />
    Merci d'avance

  10. #10
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut remplace le retour chariot par un ¤
    le template de remplacement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <xsl:template name="string-replace">
    				<xsl:param name="str" />
    				<xsl:param name="search" />
    				<xsl:param name="replace" />
    				<xsl:choose>
    					<xsl:when test="$search and contains($str, $search)">
    						<xsl:value-of select="substring-before($str, $search)" />
    						<xsl:value-of select="$replace" />
    						<xsl:call-template name="string-replace">
    							<xsl:with-param name="str" select="substring-after($str, $search)" />
    							<xsl:with-param name="search" select="$search" />
    							<xsl:with-param name="replace" select="$replace" />	
    						</xsl:call-template>
    					</xsl:when>
    					<xsl:otherwise>
    						<xsl:value-of select="$str" />
    					</xsl:otherwise>
    				</xsl:choose>
    			</xsl:template>
    l'attribution de valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:call-template name="string-replace">
    										<xsl:with-param name="str">
    											<xsl:value-of select="."/>
    										</xsl:with-param>
    										<xsl:with-param name="search">
    											<xsl:text>
    </xsl:text>
    										</xsl:with-param>
    										<xsl:with-param name="replace">
    											<xsl:text>¤</xsl:text>
    										</xsl:with-param>
    									</xsl:call-template>
    									<xsl:text>|</xsl:text>
    Bizarrement quand je l'affiche directement avec mon navigateur ça marche on voit que les retours chariots sont remplacés par les ¤

    mais quand je fais le vrai traitement c'est à dire que mon xml devient un txt alors il me laisse les retours chariots je ne comprend plus rien

  11. #11
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Faudrait qu'on voie tout ton XSL, le problème doit être ailleurs.

  12. #12
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut remplace le retour chariot par un ¤
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    <?xml version="1.0" encoding="UTF-8"?>
    	<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    		<xsl:output method="text"/>	
     
    			<xsl:template name="string-replace">
    				<xsl:param name="str" />
    				<xsl:param name="search" />
    				<xsl:param name="replace" />
    				<xsl:choose>
    					<xsl:when test="$search and contains($str, $search)">
    						<xsl:value-of select="substring-before($str, $search)" />
    						<xsl:value-of select="$replace" />
    						<xsl:call-template name="string-replace">
    							<xsl:with-param name="str" select="substring-after($str, $search)" />
    							<xsl:with-param name="search" select="$search" />
    							<xsl:with-param name="replace" select="$replace" />	
    						</xsl:call-template>
    					</xsl:when>
    					<xsl:otherwise>
    						<xsl:value-of select="$str" />
    					</xsl:otherwise>
    				</xsl:choose>
    			</xsl:template> 
    			<!-- commencement a la racine -->		
     
    			<xsl:template match="/">
     
    				<!-- Parcourt tous les attributs d'un formulaire (chemin form/submits/submit)   -->
    				<xsl:for-each select="/form/submits/submit">
     
    					<!-- Selectionne les attributs submit-date -->
    					<xsl:variable name="Date" select="submit-date"/>
    					<!-- Changement du format date de JJ/MM/AA en AAAA/MM/JJ -->
    					<xsl:variable name="Date_Final" select="concat(20, substring($Date, 7,2),  substring($Date, 4, 2),  substring($Date,1,2))"/>	
    					<!--Affiche valeur $Date_Final-->
    					<xsl:value-of select="$Date_Final"/>	
     
    					<xsl:text>|</xsl:text>
    					<!-- Selectionne les attributs submit-id numero du formulaire qui se trouveront dans la variable $id-->
    					<xsl:variable name="id" select="submit-id"/>
    					<!-- affiche la variable $id-->
    					<xsl:value-of select="$id"/>
     
    					<!-- Affiche le texte brut -->
    					<xsl:text>|</xsl:text>
    						<xsl:text>A</xsl:text>
    					<xsl:text>|</xsl:text>
     
    						<!-- boucle for qui Parcourt toutes les response-->
    						<xsl:for-each select="questions/question/responses/response">
     
     
    							<!--condition if par rapport aux question-title : si question egale au texte entre quotes, alors -->
    							<xsl:if test ="normalize-space(../../question-title/text()) = 'Adresse de la société'">
    								<!-- retour chariot-->
    								<xsl:text>
    </xsl:text>
    								<!-- Affiche la valeur $Date_Final-->
    								<xsl:value-of select="$Date_Final"/>
    								<xsl:text>|</xsl:text>
    								<!--Affiche la valeur id-->
    								<xsl:value-of select="$id"/>
    								<!-- Affiche le texte brute-->
    								<xsl:text>|</xsl:text><xsl:text>B</xsl:text><xsl:text>|</xsl:text>
    							</xsl:if ><!--fin de la condition-->
     
    							<!--condition if par rapport aux question-title si question egale au texte entre quotes, alors-->
    							<xsl:if test='normalize-space(../../question-title/text()) ="Secteur d&apos;activité"'>
    								<!-- retour chariot-->
    								<xsl:text>
    </xsl:text>
    								<!-- Affiche la valeur $Date_Final-->
    								<xsl:value-of select="$Date_Final"/><xsl:text>|</xsl:text>
    								<!--Affiche la valeur id-->
    								<xsl:value-of select="$id"/>
    								<!-- Affiche le texte brute-->
    								<xsl:text>|</xsl:text><xsl:text>C</xsl:text><xsl:text>|</xsl:text>
    							</xsl:if ><!--fin de la condition-->
     
    							<!--condition if par rapport aux question-title sisi question egale au texte entre quotes, alors-->
    							<xsl:if test="normalize-space(../../question-title/text()) ='Nom'">
    								<!-- retour chariot-->
    								<xsl:text>
    </xsl:text>
    								<!-- Affiche la valeur $Date_Final-->
    								<xsl:value-of select="$Date_Final"/><xsl:text>|</xsl:text>
    								<!--Affiche la valeur id-->
    								<xsl:value-of select="$id"/>
    								<!-- Affiche le texte brute-->
    									<xsl:text>|</xsl:text><xsl:text>D</xsl:text><xsl:text>|</xsl:text>
    							</xsl:if ><!--fin de la condition-->
     
    									<!-- affiche toutes les responses de mon document xml-->
    									<xsl:call-template name="string-replace">
    										<xsl:with-param name="str">
    											<xsl:value-of select="."/>
    										</xsl:with-param>
    										<xsl:with-param name="search">
    											<xsl:text>
    </xsl:text>
    										</xsl:with-param>
    										<xsl:with-param name="replace">
    											<xsl:text>¤¤</xsl:text>
    										</xsl:with-param>
    									</xsl:call-template>
    									<xsl:text>|</xsl:text>
     
    						</xsl:for-each><!--fin de la 2eme boucle -->
     
    							<xsl:text>|</xsl:text>
    							<xsl:text>
    </xsl:text><!-- retour chariot-->
     
    				</xsl:for-each>	<!--fin de la 1ere boucle -->
    			</xsl:template>
     
     
    	</xsl:stylesheet>
    Fichiers attachés Fichiers attachés

  13. #13
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Vu comment c'est écrit, il est possible que tu aies des "\n" tout seuls ou des "\r" tout seuls ce qui fait que tu aurais quand même des retours chariot qui traînent vu que tu remplaces la chaîne '\r\n'.

    Essaye en appellant 2 fois le replace : 1 avec '\r' et 1 avec '\n'.

    A part ça, je ne vois vraiment aucune raison pour qu'il y'ait un problème.

  14. #14
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut
    Citation Envoyé par Loceka Voir le message
    Vu comment c'est écrit, il est possible que tu aies des "\n" tout seuls ou des "\r" tout seuls ce qui fait que tu aurais quand même des retours chariot qui traînent vu que tu remplaces la chaîne '\r\n'.

    Essaye en appellant 2 fois le replace : 1 avec '\r' et 1 avec '\n'.

    A part ça, je ne vois vraiment aucune raison pour qu'il y'ait un problème.
    malheureusement ça ne marche pas cela fonctionne toujours via le navigateur mais quand je passe à la vrai conversion toujours la même erreur

  15. #15
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Il y a plusieurs facteurs qui interviennent tacitement ou explicitement: mac/windows/nix ont leur convention de nouvelle ligne (\r, \r\n, \n) et puis quand l'engin d'xml charge un fichier il fait son bouleau de normalisation aussi....

    En tout cas quand on fait les cherches et remplacements successivement \r et \n (l'ordre ne soit pas important), il devrait marcher pour tous les cas.

    Si ce dernier ne marche pas, je soupçon que le script ne soit pas s'écrit correctement. Le bloc de code concernant doit s'écrire quelque peu comme ça, grosso modo.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <!-- ... etc etc -->
    <!-- affiche toutes les responses de mon document xml-->
    <xsl:variable name="string-intermediate">
        <xsl:call-template name="string-replace">
            <xsl:with-param name="str" select="." />
            <xsl:with-param name="search" select="'&_#13;'" />  <!-- &_# sans underscore -->
            <xsl:with-param name="replace" select="'&_#164;'" />  <!-- &_# sans underscore -->
        </xsl:call-template>
    </xsl:variable>
    <xsl:variable name="string-processed">
        <xsl:call-template name="string-replace">
            <xsl:with-param name="str" select="$string-intermediate" />
            <xsl:with-param name="search" select="'&_#10;'" />  <!-- &_# sans underscore -->
            <xsl:with-param name="replace" select="'&_#164;'" />  <!-- &_# sans underscore -->
        </xsl:call-template>
    </xsl:variable>
    <!-- puis montrer le résultat -->
    <xsl:value-of select="$string-processed" />
    <xsl:text>|</xsl:text>
    <!-- etc etc... -->

  16. #16
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je viens de remarquer vous utilisez une construction comme ceci:
    <!-- &_# lire comme &# -->
    <xsl:with-param name="search">
    <xsl:text>&_#13;&_#10;</xsl:text>
    </xsl:with-param>
    Je dirais non. C'est de chercher de problème pour soi-même et il devient implémentation dépendante: certain xslt engin le prend très mal. Il vaut mieux toujours s'écrire soit comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <!-- &_# lire comme &# -->
    <xsl:with-param name="search" select="'&_#13;&_#10;'" />
    soir comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <!-- &_# lire comme &# -->
    <xsl:with-param name="search">
        <xsl:value-of select="'&_#13;&_#10;'" />
    </xsl:with-param>

  17. #17
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    [HS]
    @tsuji: tu peux écrire &#[B][/B]10; pour que ça s'affiche bien (cf ce post)
    [/HS]

    Sinon je ne savais pas que le <text>...</text> pouvait être mal interprété, ceci dit je l'utilise extrèmement rarement. ^_^

  18. #18
    Membre du Club
    Homme Profil pro
    Etudiant en alternance
    Inscrit en
    Février 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant en alternance

    Informations forums :
    Inscription : Février 2011
    Messages : 75
    Points : 44
    Points
    44
    Par défaut retour chariot
    Je vous remercie pour vos réponses

    mais malheureusement lors de la saisie de vos code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <xsl:with-param name="search">
    <xsl:value-of select="'
    '"/>
    </xsl:with-param>
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:with-param name="search">
        <xsl:value-of select="'&_#13;&_#10;'" />
    </xsl:with-param>
    je recois un message d'erreur

    Erreur d'analyse XML : mal formé
    Emplacement : file:///E:/mairie%20de%20paris/xsl/test/form/Lutece-sourcing.xsl
    Numéro de ligne 96, Colonne 37 : <xsl:value-of select="'&#10;'

  19. #19
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    J'espère que vous aviez enlever le "underscore" (_) au moins dans le second cas dans le code réel?

    Mais pour le premier, c'est tout de même m'étonner. C'est de jamais vu. Avez-vous essayé l'autre version?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:with-param name="search" select="'
    '" />
    Il se peut que le message provenait de par d'autre raison syntactique ailleurs.

  20. #20
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    @Loceka: salut Tlouye, merci pour le truc et l'effort d'alerter le management.

    En ce qui concerne la syntaxe utilisant xsl:text, je peux proposer un petit document xslt autonome pour faire tester.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" encoding="utf-8" />
    <xsl:param name="s" select="'cr: 
     etc cr: 
     etc'" />
    <xsl:template match="/">
    <root>
    <result-select>
        <xsl:call-template name="string-replace">
            <xsl:with-param name="str" select="$s" />
            <xsl:with-param name="search" select="'
    '" />
            <xsl:with-param name="replace" select="'¤'" />
        </xsl:call-template>
    </result-select>
    <result-text>
        <xsl:call-template name="string-replace">
            <xsl:with-param name="str" select="$s" />
            <xsl:with-param name="search">
                <xsl:text>
    </xsl:text>
            </xsl:with-param>
            <xsl:with-param name="replace" select="'¤'" />
        </xsl:call-template>
    </result-text>
    </root>
    </xsl:template>
    <!-- ajouter to template nommé aussi... -->
    </xsl:stylesheet>
    Il ne donne pas les même résultats pas MSXML2 ou msxsl.exe. Le second cas, result-text, rien n'est remplacé... Pour xerces, saxon, par exemple, ça va. En tout cas, ce sont des petites détailles qui lient probablement avec seulement des caractères invisibles comme cr, lf...

Discussions similaires

  1. Remplacer chaine de caractères par une autre chaine
    Par unmaxdemily dans le forum SAS Base
    Réponses: 2
    Dernier message: 25/06/2008, 09h11
  2. Remplacer un caractère par un autre
    Par cybkilla dans le forum Sybase
    Réponses: 3
    Dernier message: 08/01/2007, 15h42
  3. JSP : comment remplacer une chaine de caractères par une autre
    Par techquos dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/12/2006, 09h37
  4. Réponses: 8
    Dernier message: 15/07/2006, 18h59
  5. [XSLT ]remplacement d un caractere par son code
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 02/09/2005, 16h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo