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] Méthode Muench et formatage


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 129
    Points : 93
    Points
    93
    Par défaut [XSLT] Méthode Muench et formatage
    Bonjour à tous,

    Ça fait à peine quelques heures que je viens de m'initier au XPath et XSLT, j'ai trouvé des infos intéressantes mais là je bloque...

    J'ai le fichier XML 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <Catalog>
      <Livres>
        <ISBN>2756400211</ISBN>
        <Title>La couronne des sept royaumes, Tome 5 : Les fruits de la vengeance</Title>
        <Author>David-B Coe</Author>
        <Publisher>Pygmalion</Publisher>
        <AvgRating />
        <Comments />
        <PicCoverUrl>http://ec1.images-amazon.com/images/P/2756400211.01._SCMZZZZZZZ_V51317311_.jpg</PicCoverUrl>
        <Category>Fantastique</Category>
        <Language>Français</Language>
      </Livres>
      <Livres>
        <ISBN>229033068X</ISBN>
        <Title>La Compagnie Noire, Tome 3 : La Rose blanche</Title>
        <Author>Glen Cook</Author>
        <Publisher>J'ai Lu</Publisher>
        <AvgRating>3,5</AvgRating>
        <Comments />
        <PicCoverUrl>http://images.amazon.com/images/P/229033068X.01._SCMZZZZZZZ_V57124811_.jpg</PicCoverUrl>
        <Category>Fantastique</Category>
        <Language>Français</Language>
      </Livres>
    </Catalog>
    J'ai trouvé dans le forum la façon de regrouper sur un élément, soit par la méthode Muench. Ça me donne ceci :

    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
     
    <xsl:key name="id" match="Category" use="."/>
     
    <xsl:template match="/">
    <html>
    <body>
    <!-- parcoure toutes les catégories de livres distinctes avec Category -->
     <xsl:for-each select="//Category[generate-id(.)=generate-id(key('id', .) [1])]">
      <!-- stockage de la catégorie unique dans une variable -->
      <xsl:variable name="cat" select="."/>
      <!-- teste si la variable cat récupérée n'est pas vide -->
       <xsl:if test="string-length($cat) != 0">
        <b><xsl:value-of select="$cat"/></b>
        <br/>
        <br/>
        <!-- parcoure toutes les données (noeuds) des livres -->
        <xsl:for-each select="//ISBN | //Title | //Author | //Publisher | //AvgRating | //Comments">
          <!-- si la catégorie est la même que celle précédemment, on met la valeur des noeuds -->
          <xsl:if test="../Category = $cat">
             <!--<xsl:apply-templates/>-->
            <xsl:value-of select="."/>
            <br/>
          </xsl:if>
        </xsl:for-each>
        <br/>
       </xsl:if>
     </xsl:for-each>
    </body>
    </html>
    </xsl:template>
    D'abord, je me demande si la façon d'extraire la valeur des noeuds que j'utilise est correcte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:for-each select="//ISBN | //Title | //Author | //Publisher | //AvgRating | //Comments">
    Ensuite, j'aimerais appliquer un formatage différent pour chacun des noeuds enfants de Livres. Par exemple, j'aimerais que le noeud Title soit en gras, que le noeuds PicCoverURL soit placé dans une balise image, etc. J'ai essayé plusieurs chose mais je n'arrive pas à le faire. Quelqu'un a une idée ?

    Merci à l'avance.

    iDaaX

  2. #2
    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,

    Citation Envoyé par iDaaX
    D'abord, je me demande si la façon d'extraire la valeur des noeuds que j'utilise est correcte :
    Pas vraiment, c'est totalement inefficace et tu as beaucoup plus simple... Tu as fait le plus dur : regrouper les catégories. Ensuite, il n'y a plus qu'à sélectionner les livres de la même catégorie, puis appeler les templates des éléments fils de ces livres. Ce qui donne :
    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
    <xsl:key name="id" match="Category" use="."/>
     
    <xsl:template match="/">
    <html>
    <body>
    <!-- parcoure toutes les catégories de livres distinctes avec Category -->
     <xsl:for-each select="//Category[generate-id(.)=generate-id(key('id', .) [1])]">
      <!-- stockage de la catégorie unique dans une variable -->
      <xsl:variable name="cat" select="."/>
      <!-- teste si la variable cat récupérée n'est pas vide -->
       <xsl:if test="$cat != ''">
        <b><xsl:value-of select="$cat"/></b>
        <br/>
        <br/>
        <!-- parcoure les livres de la même catégorie -->
        <xsl:for-each select="/Catalog/Livres[Category = $cat]">
            <xsl:apply-templates select="ISBN|Title|Author|Publisher|AvgRating|Comments"/>
            <br/>
        </xsl:for-each>
        <br/>
       </xsl:if>
     </xsl:for-each>
    </body>
    </html>
    </xsl:template>
     
    <xsl:template match="Title">
      <b><xsl:value-of select="."/></b>
    </xsl:template>
     
    ...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 129
    Points : 93
    Points
    93
    Par défaut
    Merci Fatherland de m'avoir éclairé, tout fonctionne maintenant.

    Maintenant, si je veux afficher les données de chacun des Livres sur deux colonnes, dois-je insérer ça dans la méthode que tu as décrite dans le défi de setptembre 2004 ? Est-ce faisable ?

    J'ai essayé de manipuler le code et de l'adapter mais c'est trop lourd et trop inefficace...

    iDaaX

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/03/2007, 10h34
  2. [XSLT] Regroupement et méthode Muench
    Par derek.mf dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 06/12/2006, 16h25
  3. [XSLT]Problème de formatage XSL
    Par lexidus dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 14/09/2006, 10h01
  4. [XSLT]Formatage de mon html non désiré
    Par Thanos76 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 25/06/2005, 12h16
  5. XSLT -> HTML : formatage : indentation et retour a la lig
    Par jiib75 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 01/05/2004, 11h11

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