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 :

[XSL] Conseil pour un regroupement


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Par défaut [XSL] Conseil pour un regroupement
    Bonjour à tous,

    Je ne suis pas du tout familier avec le XSL et malheureusement j'ai un temps très court pour m'y habituer et réussir ce que je veux faire. Je trouve la syntaxe ainsi que les fonctions très difficile à appréhender rapidement, c'est pourquoi je vous demande de l'aide.
    Alors sans perdre de temps je vous expose mon problème.

    Voici la source XML que j'ai:
    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
     
    <products>
         <product>
              <gamme>Gamme 1</gamme>
              <nom>Produit 1</nom>
              <description>...</description>
         </product>
         <product>
              <gamme>Gamme 2</gamme>
              <nom>Produit 2</nom>
              <description>...</description>
         </product>
         <product>
              <gamme>Gamme 2</gamme>
              <nom>Produit 3</nom>
              <description>...</description>
         </product>
         <product>
              <gamme>Gamme 1</gamme>
              <nom>Produit 4</nom>
              <description>...</description>
         </product>
    </products>
    Quelque chose d'assez classique donc. Mon souhait serait donc de faire comme vous l'imaginez un regroupement par gamme, mais pas seulement. Je précise que mon xsl me sert pour générer du HTML et pas une autre version du fichier XML.

    Pour ce regroupement il y aurait une particularité: Regrouper par gamme et mettre ensuite tous les éléments les uns à la suite des autres.
    Pour illustrer mon idée, voici un exemple simplifié du code html que je voudrai obtenir :

    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
     
    <h2>Gamme 1</h2>          
    <ul>
         <h3>Produit 1</h3>
         <p>...</p>
         <h3>Produit 4</h3>
         <p>...</p>
    </ul>
    <h2>Gamme 2</h2>
    <ul>
         <h3>Produit 2</h3>
         <p>...</p>
         <h3>Produit 3</h3>
         <p>...</p>
    </ul>
    J'ai essayé quelque petites choses en rapport avec la méthode muench mais sans jamais vraiment trouver de solution.

    Si vous avez une idée je suis preneur

    Merci d'avance

    edit: actuellement j'arrive bien à regrouper par gamme, mais je n'arrive pas à boucler l'enchainement =>nom=>description |=>nom=>description (...) à l'intérieur de ma gamme...

  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
    Voici une transformation qui fait l'affaire :
    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
     <xsl:stylesheet version="1.0">
      <xsl:template match="/">
        <html>
            <xsl:for-each select="/products/product[not(preceding-sibling::product/gamme = gamme)]">
                <xsl:sort select="gamme"/>
                <h2><xsl:value-of select="gamme"/></h2>
                <xsl:variable name="gamme" select="gamme"/>
                <ul>
                    <xsl:for-each select="/products/product[gamme=$gamme]">
                        <xsl:sort select="nom"/>
                        <h3><xsl:value-of select="nom"/></h3>
                        <p><xsl:value-of select="description"/></p>
                    </xsl:for-each>
                </ul>
            </xsl:for-each>
        </html>
      </xsl:template>
     </xsl:stylesheet>
    La difficulté en XSL-T est toujours de bien trouver la condition logique qui va déclencher le traitement voulu...

    Ici, on doit trouver le premier produit de chaque gamme (ce produit est tel qu'aucun autre produit avant lui est de la même gamme !) pour ensuite aller chercher tous les produits de cette gamme. C'est un cas d'école...

  3. #3
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Par défaut
    Merci beaucoup pour ta réponse. En effet c'est surement un cas vu mainte et mainte fois, mais je n'ai pas trouvé d'équivalent sur le forum, et vu que meme si en logique je me débrouille un peu, la syntaxe du xsl me bloque sacrément j'avouerai.
    Je vais étudier ton code. Merci encore !

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

Discussions similaires

  1. [XSL] Besoin de conseils pour un développement
    Par ben23 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 10/07/2006, 21h31
  2. Réponses: 3
    Dernier message: 01/07/2003, 16h04
  3. Cherche conseil pour choisir mon orientation.
    Par AslDice dans le forum Débuter
    Réponses: 6
    Dernier message: 24/04/2003, 17h07
  4. Conseils pour poser votre question...
    Par Community Management dans le forum XMLRAD
    Réponses: 0
    Dernier message: 30/01/2003, 16h58
  5. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 15h35

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