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

XSL/XSLT/XPATH XML Discussion :

remplacer du text du select [XSLT 2.0]


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut remplacer du text du select
    Bonjour à tous,


    Voilà je plonge dans le XSLT et j'aurais besoin de savoir comment faire pour dans le code suivant

    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
        <xsl:template match="onix3:TextContent">
            <xsl:if test="./onix3:TextType='03' or (./onix3:TextType='05' and count(../onix3:TextContent[onix3:TextType='03']) = 0)">
                <xsl:element name="description">
                    <xsl:attribute name="format">
                        <xsl:choose>
                            <xsl:when test="./onix3:Text/@textformat='05'">html</xsl:when>
                            <xsl:otherwise>plain</xsl:otherwise>
                        </xsl:choose>
                    </xsl:attribute>
                    <xsl:text disable-output-escaping="yes"><![CDATA[ <![CDATA[  ]]></xsl:text>
                        <xsl:apply-templates mode="copy-without-ns" select="./onix3:Text"/>
                    <xsl:text disable-output-escaping="yes"><![CDATA[]]]]><![CDATA[>]]></xsl:text>
                </xsl:element>
            </xsl:if>
        </xsl:template>
    au moment du select dans le texte que je sélectionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates mode="copy-without-ns" select="./onix3:Text"/>
    comment faire pour remplacer le texte qui si trouve, on supposant qu'il contienne par exemple: "bb" remplacé par "cc" et "ee" remplacé par "ff", il y aurais deux changement à faire et la je sèche un peut....

    je suis sur la piste du translate.....

    http://stackoverflow.com/questions/8...on-in-xslt-1-0


    je vous remercie d'avance.

  2. #2
    Membre Expert
    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
    Par défaut
    Citation Envoyé par Snyper Voir le message
    je suis sur la piste du translate.
    C'est une mauvaise piste.

    Le translate permet seulement de remplacer un unique caractère par un autre caractère. Ca ne marche pas pour des chaines (plusieurs caractères à remplacer par un ou plusieurs caractères ou le contraire).

    Tu n'as que 3 solutions pour faire ça (de la plus simple à la plus complexe):
    1. passer sur du XSLT/XPath 2.0 (si ton parseur XSL le gère) et utiliser la méthode replace
    2. utiliser EXSLT (si ton parseur XSL le permet) et sa fonction replace
    3. faire un template récursif qui remplacera chaque occurence de ta première chaine par la seconde (utilisation de substring-before et substring-after)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut
    Bonjour merci pour ta réponse,

    Je vais voir ça il faut aussi que je regarde un peut la norme onix3 car elle est présente dans la transformation.



    Bien cordialement,

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut
    Donc la façon dont le valeur est copié par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:text disable-output-escaping="yes"><![CDATA[ <![CDATA[  ]]></xsl:text>
                        <xsl:apply-templates mode="copy-without-ns" select="./onix3:Text"/>
                    <xsl:text disable-output-escaping="yes"><![CDATA[]]]]><![CDATA[>]]></xsl:text>
    comment faire pour remplacer le texte.....

    ==>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rende: quelque chose </br></br>
    Merci

  5. #5
    Membre Expert
    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
    Par défaut
    Alors déjà c'est pas du texte.
    <p>quelque chose</p> c'est un élément (p) avec du contenu texte. Et tu veux le remplacer (l'élément) par un élément texte suivi de 2 éléments br.

    C'est déjà plus du tout pareil.

    Mais pour le remplacement du texte en soit, les 3 solutions dont j'ai parlé ne changent pas.
    Ce qui ne change pas non plus c'est notre connaissance sur ton parseur :
    - peut-il gérer le XSL 2.0 ?
    - peut-il gérer EXSLT ?

    En gros qu'as-tu tenté de faire ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Par défaut
    Oui c'est juste, je suis désolé pour l'erreur....

    mais je pense qu'avec ce paramètre:

    les nœuds fils sont copié comme du texte, je me trompe?

    Alors je peux faire un truc du style?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <xsl:value-of  select=" replace(current(),'&#139;p&#155;','OUTRE_CHOSE')"/>
    <xsl:text disable-output-escaping="yes"><![CDATA[ <![CDATA[  ]]></xsl:text>
                        <xsl:apply-templates mode="copy-without-ns" select="./onix3:Text"/>
                    <xsl:text disable-output-escaping="yes"><![CDATA[]]]]><![CDATA[>]]></xsl:text>
    </xsl:value-of>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programme de remplacement de texte dans des fichiers
    Par Invité4 dans le forum Linux
    Réponses: 13
    Dernier message: 12/11/2006, 16h06
  2. remplacer du texte dans un tableau généré
    Par jcaruana dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/02/2006, 16h36
  3. Comment remplacer un texte ?
    Par EssaiEncore dans le forum Langage
    Réponses: 8
    Dernier message: 09/12/2005, 11h42
  4. Remplacer un texte par un autre
    Par Guillaume602 dans le forum C++
    Réponses: 3
    Dernier message: 24/11/2005, 00h40
  5. [langage] Remplacer du texte dans un fichier
    Par Michaël dans le forum Langage
    Réponses: 9
    Dernier message: 11/03/2005, 15h19

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