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 1.0] Grouping sur attribut


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [XSLT 1.0] Grouping sur attribut
    Bonjour,

    Voila 2jours que je m'arrache les cheveux devant mon code xsl. Je voudrais grouper des balises redondantes pour ne m'afficher que les infos variables.

    Mon Xml se présente ainsi :

    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
    <testcase>
      <class classname="Class1">
        <method name="methodA1">
           <execTime date="03032008">1,35</execTime>
        </method>
      </class>
     
    <class classname="Class1">
        <method name="methodA1">
           <execTime date="03042008">1,26</execTime>
        </method>
      </class>
     
    <class classname="Class1">
        <method name="methodA2">
           <execTime date="03032008">2,07</execTime>
        </method>
      </class>
     
    <class classname="Class2">
        <method name="methodB1">
           <execTime date="03032008">0,27</execTime>
        </method>
      </class>
     
    <class classname="Class2">
        <method name="methodB1">
           <execTime date="03042008">0,34</execTime>
        </method>
      </class>
    Et je voudrais obtenir un xml en sortie de ce type :

    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
    <testcase>
      <class classname="Class1">
        <method name="methodA1">
           <execTime date="03032008">1,35</execTime>
           <execTime date="03042008">1,26</execTime>
        </method>
        <method name="methodA2">
           <execTime date="03032008">2,07</execTime>
        </method>
      </class>
     
      <class classname="Class2">
        <method name="methodB1">
           <execTime date="03032008">0,27</execTime>
           <execTime date="03042008">0,34</execTime>
        </method>
      </class>
    <testcase>
    Je me suis essayé à la méthode Muench car mon fichier xml initial est volumineux mais d'une part je n'arrive pas à la mettre en place, et d'autre part je n'ai trouvé aucun exemple de cette méthode qui traite d'un <xsl:key> sur attribut.

    Pourriez-vous me mettre sur le chemin ?
    (je ne suis plus au boulot sinon j'aurais pu vous ajouter mon fichier xsl, demain donc)

    Cordialement,
    Max.

  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,

    tu dois définir tes index ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:key name="classes" match="class" use="@classname" />
    <xsl:key name="methodes" match="method" use="@name" />
    Après, ce n'est qu'une simple application de la méthode Muench, avec deux boucles for-each imbriquées, une pour les classes et l'autre pour les méthodes de la classe courante. La première boucle est une application triviale de la méthode Muench, l'autre est un peu plus complexe car il ne faut considérer que les méthodes correspondantes à la classe en cours, et se méfier des méthodes portant le même nom mais de classes différentes. A vue de nez, ça devrait donner ça :
    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:key name="classes" match="class" use="@classname"/>
        <xsl:key name="methodes" match="method" use="@name"/>
        <xsl:template match="testcase">
            <xsl:copy>
                <xsl:for-each select="class[generate-id() = generate-id(key('classes', @classname)[1])]">
                    <xsl:variable name="current-class" select="@classname"/>
                    <xsl:copy>
                        <xsl:copy-of select="@*"/>
                        <xsl:for-each select="key('classes', $current-class)/method[generate-id()=generate-id(key('methodes', @name)[../@classname=$current-class][1])]">
                            <xsl:copy>
                                <xsl:copy-of select="@*"/>
                                <xsl:copy-of select="key('methodes', @name)[../@classname=$current-class]/execTime"/>
                            </xsl:copy>
                        </xsl:for-each>
                    </xsl:copy>
                </xsl:for-each>
            </xsl:copy>
        </xsl:template>
    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

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci, ca marche parfaitement !

    Pour mon compte, j'étais en fait assez loin de la solution. Je débute dans le xml/xsl et je n'ai pas encore assimilé tout les concepts.

    Je vais donc aller potasser un peu

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

Discussions similaires

  1. [XSLT] transformation HTML problème sur les attributs
    Par mamax29 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 02/12/2010, 14h28
  2. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  3. Réponses: 6
    Dernier message: 06/01/2009, 21h01
  4. [XSLT 2.0] Boucler sur la valeur d'un attribut
    Par groskek dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 28/05/2007, 08h59
  5. [RaveReport] - Bloquer groupe sur une page
    Par muaddib dans le forum Rave
    Réponses: 3
    Dernier message: 25/02/2003, 16h21

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