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 :

problème affichage de contenu d'un noeud


Sujet :

XML/XSL et SOAP

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 2
    Points
    2
    Par défaut problème affichage de contenu d'un noeud
    Bonjour,

    j'ai un XML avec une arborescence de ce type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      NOEUD1
          NOEUD2
              NOEUD3/
              TEXTE1...
              NOEUD3/
              TEXTE2...
         /NOEUD2
      /NOEUD1

    pour chaque NOEUD1, je fais un <xsl:apply-templates/>
    Ensuite dans le <xsl:template match="NOEUD2">,
    comment faire pour afficher le contenu du premier NOEUD3 puis le TEXTE1 puis le contenu du second NOEUD3 puis le TEXTE2
    (autrement dit en respectant l'ordre du XML)?


    J'ai essayé avec un appel à <xsl:template match="NOEUD3"> avec <xsl:apply-templates/> dans <xsl:template match="NOEUD2">
    mais comme prévu, le traitement du NOEUD3 se fait après l'affichage des différents textes.


    Voici à quoi ressemble mes templates :

    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
     
    <xsl:template match="NOEUD2">
      <br/>
      <xsl:value-of select="NOEUD2"/>
      <xsl:variable name="n" select="@N"/>
      <xsl:value-of select=".....($n))"/>
      <xsl:value-of select="$n"/>
      <xsl:apply-templates/>
    </xsl:template>
     
     
    <xsl:template match="NOEUD3">
      <xsl:value-of select="NOEUD3"/>
      <xsl:variable name="s" select="@S"/>
      <xsl:value-of select="substring(......, 1, $s)"/>
    </xsl:template>

  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
    est ce que TEXTE1 est fils de NOEUD3? ou est ce du texte

    si c est la valeur des text() des noeuds, il suffit d 'crire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="NOEUD3"/>
    le processeur XSL se débrouillera pour sortir tous les noeuds et sous noeuds text() dans l ordre

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    TEXTE1 est simplement du texte.

    Mon problème est qu'au final, j'aurais
    TEXTE1 TEXTE2 contenuDuPremier(NOEUD3) contenuDuSecond(NOEUD3)

  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
    réxpliconq bien la chose:
    donc la structure serait ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <NOEUD2>
      <NOEUD3>TEXTNOEUD3-1</NOEUD3>
      TEXTE1
      <NOEUD3>TEXTNOEUD3-2</NOEUD3>
      TEXTE2
    </NOEUD2>
    et donc tu voudrais
    TEXTNOEUD3-1
    TEXTE1
    TEXTNOEUD3-2
    TEXTE2

    c bien ça?

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    voila, tu as très bien compris

  6. #6
    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
    alors j 'écrierais ceci mais ce n est pas testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match="NOEUD2">
     <xsl:apply-templates select="node()"/>
    </xsl:template>
    <xsl:template match=text()><xsl:copy-of select="."/><xsl:template>
    <xsl:template match="*"><xsl:apply-templates select="node()"/></xsl:template>

  7. #7
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    dans le cas présent, j'opterais plutôt pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="NOEUD2">
     <xsl:value-of select="."/>
    </xsl:template>
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  8. #8
    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
    c juste pour me vexer que tu as écris ça n est ce pas
    ...mais le résultat est le même...

  9. #9
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    J'ai besoin de traiter différement la chaine si elle est dans le noeud fils à NOEUD2 (donc NOEUD3)

    Il faudrait donc faire la différenciation entre chacun.

    Je suis sur que ca ne doit pas etre compliqué, mais je doit surement mal effectuer mes recherches sous google car je ne trouve rien qui pourait m'aider..

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par luta
    c juste pour me vexer que tu as écris ça n est ce pas
    ...mais le résultat est le même...

    non, c'est pas juste pour te vexer, j'ai écris ça par ce que le résultat est pas tout à fait le même... enfin... si la structure du XML réel est plus complexe et que Noeud3 contient d'autres noeuds etc... il est possible qu'un autre template soit appliqué pour les noeuds contenus dans noeud3
    en plus c'est plus performant, avec le apply-template, faut qu'il traite chaque noeud séparément, etc... avec value-of, il retire les balises, et hop, c'est bon

    Citation Envoyé par magiro
    J'ai besoin de traiter différement la chaine si elle est dans le noeud fils à NOEUD2 (donc NOEUD3)

    Il faudrait donc faire la différenciation entre chacun.

    Je suis sur que ca ne doit pas etre compliqué, mais je doit surement mal effectuer mes recherches sous google car je ne trouve rien qui pourait m'aider..
    dans ce cas, il te faut utiliser la syntaxe de luta

    et faire deux template différents pour les noeuds texte... penche toi sur les modes de template : http://www.w3.org/TR/xslt#modes
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  11. #11
    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
    ah bah dans ces cas oui il faudra faire un templat espécifique pour NOEUD2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:template match="NOEUD2">
      <!--mon traitement ici-->
     
    </xsl:template>

  12. #12
    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
    Bonjour,

    je dois sans doute avoir mal compris, mais la solution me semble triviale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template name="NOEUD2">
      <xsl:apply-templates/>
    </xsl:template>
    <xsl:template name="NOEUD3">
    <!-- ton traitement spécifique des noeuds NOEUD3 -->
    </xsl:template>
    Le <xsl:apply-templates/> applique le template de tous les noeuds enfants de NOEUD2, dans l'ordre dans lequel ils apparaissent dans le XML ; parmi ceux-ci, les noeuds NOEUD3 sont gérés par un template spécifique, tandis que les noeuds textes sont traités par un template générique qui se contente de les envoyer en sortie.
    Citation Envoyé par luta
    réxpliconq bien la chose:
    C'est quel verbe à quel temps du subjonctif, ça ? Ou alors c'est du Klingon ?
    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

  13. #13
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    D'accord..
    Donc pour résumer, la bonne solution serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <xsl:template match="NOEUD2">
      <!-- 
           si NOEUD2/NOEUD3 alors 
                  <xsl:variable name="s" select="NOEUD2/NOEUD3/@s"/>
                  <xsl:value-of select="substring(......, 1, $s)"/>
           sinon <xsl:value-of select="NOEUD2"/>
      -->
     
    </xsl:template>
    ?????

  14. #14
    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
    Citation Envoyé par GrandFather
    Bonjour,
    C'est quel verbe à quel temps du subjonctif, ça ? Ou alors c'est du Klingon ?
    non c le langage des "others" dans lost.
    Désolé, je devais être pressé....(méchant quand même)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:template name="NOEUD2">
      <xsl:apply-templates/>
    </xsl:template>
    oui sauf que dans ce cas là les noeuds text() ne sont pas traité si je ne m abuse

  15. #15
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par luta
    oui sauf que dans ce cas là les noeuds text() ne sont pas traité si je ne m abuse
    Tout a fait

  16. #16
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Avec ceci, j'ai a nouveau le résultat

    TEXTE1 TEXTE2 contenuDuPremier(NOEUD3) contenuDuPremier(NOEUD3)

    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
     
    <xsl:template match="NOEUD2">
      <br/>
      <xsl:variable name="n" select="@N"/>
      <xsl:value-of select="...(($n))"/>
      <xsl:value-of select="$n"/>
      <xsl:for-each select=".|NOEUD3/@S">
        <xsl:choose>
          <xsl:when test="NOEUD3/@S">
             <xsl:value-of select="NOEUD3/@S"/>
          </xsl:when>
          <xsl:when test=".">
            <xsl:value-of select="."/>
          </xsl:when>
        </xsl:choose>
      </xsl:for-each>
    </xsl:template>
    je désespère

  17. #17
    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
    écoute, post un ex de xml et son résultat, on va voir ça parce qu apparmeent on avait qu une partie du problème ...

  18. #18
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Donc le XML (généré par un autre prog, je précise, donc ce n'est qu'un exemple parmi tant d'autres possibles) :

    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <?xml-stylesheet type="text/xsl" href="main.xsl"?>
     
    <NOEUD1>
     
    <NFO>BLABLA</NFO>
    <NOEUD2 N="1">Juste du texte</NOEUD2>
    <NOEUD2 N="2">
            Du texte
            <NOEUD3 S="5"/>
            avec des
            <NOEUD3 S="19"/>
            noeuds posant probleme
    </NOEUD2>
    </NOEUD1>

    puis le XSL sensé l'interpréter

    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
     
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         xmlns:msxsl="urn:schemas-microsoft-com:xslt"
         xmlns:state="http://www/cyril.com" version="1.0"> 
     
    <xsl:template match="/">
     
    <html>
    <head>
    <xsl:apply-templates select="/html/head/*" />
    </head>
     
     
    <xsl:for-each select="NOEUD1">
    	<xsl:apply-templates/>
    </xsl:for-each> 
     
     
    <xsl:template match="NOEUD2">
      <br/>
      <xsl:variable name="n" select="@N"/>
      <xsl:value-of select="...(($n))"/>
      <xsl:value-of select="$n"/>
      <xsl:for-each select=".|NOEUD3/@S">
        <xsl:choose>
          <xsl:when test="NOEUD3/@S">
             <xsl:value-of select="NOEUD3/@S"/>
          </xsl:when>
          <xsl:when test=".">
            <xsl:value-of select="."/>
          </xsl:when>
        </xsl:choose>
      </xsl:for-each>
    </xsl:template>
     
    <body>
    </body>
    </html>
     
    </xsl:template>
    le résultat souhaité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <br/>1  Juste du texte
    <br/>2  Du texte 5 avec des 19 noeuds posant problème
    et le résultat obtenu pour le moment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <br/>1  Juste du texte
    <br/>2  Du texte avec des noeuds posant problème 5 19

  19. #19
    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
    avec ça, ça devrait aller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:template match="*">
    	<xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="text()"><xsl:copy-of select="."/></xsl:template>
    <xsl:template match="NOEUD2">
    	<br/><xsl:value-of select="@N"/>
    	<xsl:apply-templates select="node()"/>
    </xsl:template>
    <xsl:template match="NOEUD3">
    	<xsl:apply-templates select="node() | @S"/>
    </xsl:template>
    <xsl:template match="@S"><xsl:value-of select="."/></xsl:template>

  20. #20
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:template name="NOEUD2">
      <xsl:apply-templates/>
    </xsl:template>
    oui sauf que dans ce cas là les noeuds text() ne sont pas traité si je ne m abuse
    Bien sûr que si. Ils sont traités par ce template générique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="text()|@*"><xsl:value-of select="."/></xsl:template>
    P.S. : pour le klingon, c'était une boutade... Mais si tu veux t'améliorer : http://www.kli.org/kli/langs/KLIfrench.html
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 8
    Dernier message: 23/07/2010, 10h42
  2. Problème d'affichage du contenu de JPanel
    Par Mic75 dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 13/12/2007, 00h53
  3. [XSLT] Problème affichage d'un noeud
    Par Mselle dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/01/2007, 11h45
  4. probléme d'affichage du contenu d'un fichier
    Par developppez dans le forum C
    Réponses: 2
    Dernier message: 20/04/2006, 19h16
  5. [DIV] [FireFox] Problème affichage du contenu dans un div
    Par jibouze dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 24/11/2005, 11h06

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