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 :

XML-> HTML par XSLT multiple for-each


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut XML-> HTML par XSLT multiple for-each
    Bonjour.
    J'ai un code pour générer du XML à partir de requetes en base de données.
    Le but est de généraliser les routines d'affichages grâce à XML. Les nodes XML sont groupés afin de garder les liens d'origine (plusieurs lignes dans la base peuvent être regroupées dans un seul node XML de niveau supérieur).
    Par exemple

    <ROOTDATA>MY DATA
    <CHAMP1>123456-8
    <CHAMP2>123456
    <CHAMP3>TEST1
    <CHAMP4>TOTO
    <CHAMP5>ESSAI1
    <CHAMP6>.0000000599309420182615</CHAMP6>
    <CHAMP7>1.03727596766392</CHAMP7>
    <CHAMP8>.0000000732489291334307</CHAMP8>
    </CHAMP5>
    </CHAMP4>
    </CHAMP3>
    </CHAMP2>
    </CHAMP1>
    <CHAMP1>123456-80
    <CHAMP2>123456
    <CHAMP3>TEST1
    <CHAMP4>TOTO
    <CHAMP5>ESSAI1
    <CHAMP6>.0000000599309420182615</CHAMP6>
    <CHAMP7>1.03727596766392</CHAMP7>
    <CHAMP8>.0000000732489291334307</CHAMP8>
    </CHAMP5>
    <CHAMP5>ESSAI2
    <CHAMP6>.0000000463912801174008</CHAMP6>
    <CHAMP7>.863908887410566</CHAMP7>
    <CHAMP8>.0000000567004534768232</CHAMP8>
    </CHAMP5>
    </CHAMP4>
    </CHAMP3>
    </CHAMP2>
    </CHAMP1>
    </ROOTDATA>

    Ensuite, j'ai essayé d'ecrire un XSLT pour passer de ce XML vers un truc en HTML (joli si possible) et c'est là que les choses se compliquent.
    Quand j'essaie de boucler sur mes noeuds, et d'afficher les valeurs, je n'arrive pas à les isoler. Si j'affiche le contenu de CHAMP4, je vais obtenir toute les données inférieures (c'est à dire ESSAI1, les valeurs numériques, puis ESSAI2, etc...).

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0"
    xmlnssl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <html>
    <body>
    <h2>Reference Data</h2>
    <table border="1">
    <tr bgcolor="#9acd32">
    <th align="left">1</th>
    </tr>
    <xsl:for-each select="ROOTDATA/CHAMP1">
    <tr>
    <td><xsl:value-of select="CHAMP2"/></td>
    <xsl:for-each select="CHAMP2">
    <table border="5">
    <tr>
    <td><xsl:value-of select="CHAMP3"/></td>
    <xsl:for-each select="CHAMP3">
    <td><xsl:value-of select="CHAMP4"/></td>
    <td>
    <xsl:for-each select="CHAMP4/CHAMP5">
    <table border="5">
    <tr>
    <td><xsl:value-of select="CHAMP5"/></td>
    <td><xsl:value-of select="CHAMP6"/></td>
    <td><xsl:value-of select="CHAMP7"/></td>
    <td><xsl:value-of select="CHAMP8"/></td>
    </tr>
    </table>
    </xsl:for-each>
    </td>
    </tr>
    </table>
    </xsl:for-each>
    </tr>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template>
    </xsl:stylesheet>

    Comment puis-je indiquer au moteur de transformation que je ne veux pas tout le contenu mais juste le niveau courant ???
    D'avance merci
    Fabien

  2. #2
    Membre éprouvé 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
    Points : 1 247
    Points
    1 247
    Par défaut
    Bien que ce soit tout à fait possible, il n'est si fréquent en XML d'avoir des éléments comme CHAMP4 contenant d'abord du texte puis d'autres éléments : d'habitude ce texte est lui-même mi dans un élément spécifique ou dans un attribut.

    Dans votre cas il existe une solution simple mais un peu risquée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="CHAMP4/text()"/>
    En effet, selon la recommandation, ce xsl:value-of va effectuer un appel implicite à la fonction string() qui elle-même ne prendra en compte que le premier noeud texte.

    Donc si le moteur XSLT utilisé est bien conforme, vous obtiendrez ce que vous voulez. Sinon, il suffira probablement de rajouter [1] pour n'avoir que le premier noeud texte et un appel à la fonction normalize-space() si vous voulez vous débarrasser de sauts de ligne indésirés...
    Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour.
    Merci pour ces indications, j'essaie de ce pas !

    Fabien

Discussions similaires

  1. xml vers html via xslt
    Par julien.63 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 23/10/2007, 10h16
  2. Transformer XML en PDF par XSLT
    Par abda1000 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 12/06/2007, 17h10
  3. [XSLT]Boucle for each
    Par jaq dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 10/12/2006, 12h40
  4. [XSLT / XPATH] for-each-group: comment ça marche?
    Par be_tnt dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 24/11/2006, 09h40
  5. [XSLT] Balise for-each et caractères spéciaux
    Par Guilbert69 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 09/10/2006, 11h37

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