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 :

[XPATH] Selectionner un noeud selon la valeur de son attribut


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 71
    Par défaut [XPATH] Selectionner un noeud selon la valeur de son attribut
    Bonjour,

    Voici en gros mon fichier xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xml>
             <body langue="fr">
                      <p>texte FR <img src="monimage fr.gif" /></p>
             </body>
             <body langue="de">
                      <p>texte DE <img src="monimage fr.gif" /></p>
             </body>
    </xml>
    Dans ma feuille de style XSL j'aimerais lui dire de me renvoyer le contenu de la balise body que je souhaite. Voici les test que j'ai effectué en voulant affiché l'intégralité du contenu de <body langue="de">

    Variante 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="/xml">
           <xsl:value-of select="body" />
    </xsl:template>
    me renvoie : "texte FR" uniquement, j'ai absolumement aucune balise.

    Variante 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="/xml">
           <xsl:value-of select="body/@langue='de'" />
    </xsl:template>
    me retourne : "true"...

    Es-ce que qqun peut m'aider dans mon dilème? J'aimerais avoir en retour "<p>texte DE <img src="monimage fr.gif" /></p>"

    D'avance un grand merci
    Grégoire

  2. #2
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Essayez plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:copy-of select="body[@langue='de']/*"/>
    Personnellement, je n'utilise différents templates que pour des arborescences non régulières et pour des call-templates. Les templates par défaut viennent aussi perturber la compréhension. Voilà pourquoi j'aurais plutôt fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="/">
      <xsl:copy-of select="/xml/body[@langue='de']/*"/>
    </xsl:template>

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 71
    Par défaut
    Merci bcp Alain, ça marche presque à 100% :-) Serais-tu m'expliquer pourquoi quand j'ai un fichier xml formater de la sorte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xml>
             <body langue="fr">
                      nouveau texte<p>texte FR <img src="monimage fr.gif" /></p>
             </body>
             <body langue="de">
                      nouveau texte<p>texte DE <img src="monimage fr.gif" /></p>
             </body>
    </xml>
    "nouveau texte" n'apparet pas?

    Il y a un second petit détail qui m'ennuie également. Je ne sais pas si c'est lié à mon XSLTProcessor, mais bizarrement mon image n'est pas fermée. Que j'inscrive dans mon fichier xml <img src="monimage fr.gif" /> ou <img src="monimage fr.gif"></img>, mon navigateur reçoit <img src="monimage fr.gif">.

    En tout cas un gros merci déjà pour la réponse précédente!

    Grégoire

  4. #4
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:copy-of select="/xml/body[@langue='de']/node()"/>
    devrait suffire à rajouter les noeuds textes directement sous <body>

    Pour ce qui est de la balise <img>, elle ne doit jamais être fermée en HTML alors qu'elle doit toujours l'être (comme les autres) en XHTML. Une bonne transformation doit savoir faire la différence (<xsl:output method="html"/>) !

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2003
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 71
    Par défaut
    Nice, tout fonctionne.

    Merci infiniment d'avoir éclairé le sombre chemin d'un jeune padawan !

    Cordialement,
    Grégoire

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

Discussions similaires

  1. [XL-2003] selectionner une ligne selon la valeur d'une cellule
    Par gcgp_67 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/05/2011, 13h41
  2. [XPATH] Selectionner des noeuds dont on ne connait pas le nom
    Par Lolo19 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/09/2009, 15h38
  3. [XSLT] Selectionner une balise selon la valeur de son attribut
    Par Monkon dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 03/09/2009, 17h03
  4. [XPATH] Selectionner 2 noeuds et les obtenir ordonnés
    Par Invité dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 09/01/2008, 17h08
  5. [XPath] Selectionner un noeud
    Par be_tnt dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/10/2006, 10h16

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