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 :

[XSLT] remplacer le contenu d'un noeud


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 71
    Points : 46
    Points
    46
    Par défaut [XSLT] remplacer le contenu d'un noeud
    Bonjour,

    dans un noeud, je cherche à remplacer pendant l'affichage plusieurs expressions par d'autres si elles existent.

    un exemple d'actualité:

    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
     
    <CM>
        ....
        <QUARTFINALE>
            <STRREPLACE mot="Espagne" par="France"/>
            <STRREPLACE mot="Suisse" par="Ukraine"/>
            <EQUIPE>Espagne</EQUIPE>
            <EQUIPE>Suisse</EQUIPE>
            <SONG>Et viva Espagne</SONG>
        </QUARTFINALE>
        ....
        <EQUIPE>Espagne</EQUIPE>
        <EQUIPE>Mexique</EQUIPE>
        ....
    </CM>
    Vu que je ne connais pas encore bien XSL, je pensais stocker les valeurs dans des variables en javascript, puis en fonction de certains test appeler la fonction replace().
    Mais comme il est possible que les 2 noeuds <EQUIPE>Espagne</EQUIPE> soient interprétés en même temps (et donc le replace se ferait dans le mauvais), l'idée n'est pas bonne.
    Il est très important dans mon cas que le replace se fasse dans tous les fils de QUARTFINALE et non dans les voisins ou les fils des voisins.

    Quelqu'un saurait-il comment procéder?

    Merci pour votre aide

  2. #2
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="EQUIPE[.=preceding-sibling::STRREPLACE/@mot]">
      <xsl:copy>
        <xsl:value-of select="preceding-sibling::STRREPLACE[@mot=current()]/@par"/>
      </xsl:copy>
    </xsl:template>
    ça devrait être ceci

  3. #3
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par luta
    ça devrait être ceci
    L'axe preceding-sibling n'est pas autorisé dans les "matching patterns". Voir http://www.w3.org/TR/xslt#patterns
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  4. #4
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    bon...et ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="EQUIPE[.=../STRREPLACE/@mot]">
      <xsl:copy>
        <xsl:value-of select="preceding-sibling::STRREPLACE[@mot=current()]/@par"/>
      </xsl:copy>
    </xsl:template>

  5. #5
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    et puis honnêtement ce n est pas très bien expliqué...ils montrent des exemples de ce que l on peut faire sans montrer ce que l on ne peut pas faire...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Merci beaucoup pour les réponses!
    Ca ne fonctionne pas (en tout cas pas tel quel, sauf erreur de ma part), mais je vais étudier cette idée en détail et je vous tiens au courant

  7. #7
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    envoit un xml complet + ton xsl ...

  8. #8
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Citation Envoyé par luta
    et puis honnêtement ce n est pas très bien expliqué...ils montrent des exemples de ce que l on peut faire sans montrer ce que l on ne peut pas faire...
    C'est vrai que ce n'est pas toujours très limpide (après tout, ce sont des spécifications, pas un tutoriel), mais là en l'occurrence c'était marqué...
    A pattern must match the grammar for Pattern. A Pattern is a set of location path patterns separated by |. A location path pattern is a location path whose steps all use only the child or attribute axes. Although patterns must not use the descendant-or-self axis, patterns may use the // operator as well as the / operator.
    Sinon, pour le problème posé, je verrais cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:template match="EQUIPE">
      <xsl:variable name="remplace" select="../STRREPLACE[@mot = .]" />
      <xsl:choose>
        <xsl:when test="$remplace">
          <!-- On remplace -->
          <xsl:value-of select="$remplace/@par" />
        </xsl:when>
        <xsl:otherwise>
          <!-- on laisse tel quel -->
          <xsl:value-of select="." />
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Les 2 exemples fonctionnent bien sur l'exemple posé (le premier ne fonctionnait pas parceque j'avais quelques templates 'parasites'...).

    Mais en poussant un peu plus loin, serait-il possible d'avoir en plus de
    'Espagne' -> 'France'
    vEspagnew -> xFrancey (v, w, x, y representant un nombre indeterminé de caractères)
    et ceci pour n'importe quel fils et petit-fils et n'importe lequel de leur noeuds ou de leur valeur.

    Ca devient tres complique pour un newbie, et je n'arrive pas a trouver de reponses sur d'anciens posts ou dans google.

    Merci

  10. #10
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 71
    Points : 46
    Points
    46
    Par défaut
    Je ne pensais pas vraiment à ca, mais l'essentiel c'est que ca marche.

    Merci à tous les deux

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

Discussions similaires

  1. [XSLT] comment recopier le contenu d'un noeud sans ses fils
    Par st0ne dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/09/2007, 11h05
  2. [XSLT]Expression régulière pour filtrer le contenu d'un noeud
    Par Matthieu Brucher dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 17/10/2006, 15h35
  3. [XSLT] remplacement de noeuds de manière récursive
    Par daniel_r dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 24/10/2005, 20h13
  4. [XSLT] Remplacer par des caractères spéciaux
    Par OXyGN dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 29/07/2005, 17h30
  5. Remplacer le contenu d'un div par un autre
    Par prgasp77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/10/2004, 23h48

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