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 :

Comment utiliser un groupeby dans xslt


Sujet :

XML/XSL et SOAP

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 62
    Points : 38
    Points
    38
    Par défaut Comment utiliser un groupeby dans xslt
    Bonjour a vous tous!
    j'ai besoin de votre aide
    pour un groupeby dans mon programme XSLT
    ca fait plusieurs recherches que je fait sans avoir de résultat weird:

    voici le input xlm
    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
    <université>
     
     <étudiant>
           <nom>réjean Tremblay</nom>
            <cours sigle="INF8430" note="89" />
            <cours sigle="INF1030" note="69" />
            <cours sigle="INF1230" note="75" />
     </étudiant>
     <étudiant>
              <nom>Martin Lambert</nom>
              <cours sigle="INF8430" note="75" />
               <cours sigle="INF1030" note="72" />
               <cours sigle="INF1230" note="73" />
     </étudiant>
     <étudiant>
     <nom>Luc Alain</nom>
     <cours sigle="INF9430" note="39" />
     <cours sigle="INF1030" note="89" />
     <cours sigle="INF1230" note="79" /></étudiant>
     <étudiant>
             <nom>Olive Saint-Amant</nom>
             <cours sigle="INF8430" note="91" />
            <cours sigle="INF1230" note="99" />
     </étudiant>
     
     </université>

    et voici mon code XSLT

    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
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:template match="/">
        <xsl:copy>
            <xsl:for-each-group select="étudiant/cours" group-by="@sigle">
                <université>
                    <étudiant><xsl:value-of select="current-grouping-key()" /></étudiant>
                    <data>
                        <xsl:for-each-group select="current-group()/data/cours" group-by="@sigle">
                            <year number="{current-grouping-key()}">	
                                <xsl:for-each select="current-group()">
                                    <xsl:copy-of select="*" />
                                </xsl:for-each>
                            </year>
                        </xsl:for-each-group>
                    </data>
                </université>
            </xsl:for-each-group>
        </xsl:copy>
    </xsl:template>
    et voici le mon output

    Sigle Nombre d'étudiants Moyenne du cours
    INF8430 1 89.0
    INF1030 1 69.0
    INF1230 1 75.0
    INF8430 1 75.0
    INF1030 1 72.0
    INF1230 1 73.0
    INF9430 1 39.0
    INF1030 1 89.0
    INF1230 1 79.0
    INF8430 1 91.0
    INF1230 1 99.0
    et voici le resultat attendu


    Sigle Nombre d'étudiants Moyenne du cours
    INF8430 3 85.0
    INF1030 3 76.7
    INF1230 4 81.5
    INF9430 1 39.0
    je suis loin du résultat

    merci de votre temps

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 62
    Points : 38
    Points
    38
    Par défaut
    Rebonjour. Pas de neuf, s'il vous plaît ?

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    pas très logique tout ça.

    Tu veux faire un seul regroupement, donc tu as besoin de exactement un for-each-group. Pas deux, pas trois, pas zéro, un.

    Tu as besoin de gérer une seule liste de choses, et tu le fais dans un seul template, donc en utilisant seulement des boucles. Donc tu as besoin de exactement une boucle. Pas deux, pas trois, pas zéro, une.

    Tu as besoin de une boucle pour gérer ta liste, un for-each-group pour faire ton regroupement, donc ta boucle, unique, doit être un for-each-group.
    Je ne comprends pas ce que tu espérais avec tes trois boucles.

    Essaie de voir ce que ça donne avec une seule boucle, avec ce contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:value-of select="current-grouping-key()"/>
    <xsl:text>   </xsl:text>
    <xsl:value-of select="count(étudiant[cours[@sigle=current-grouping-key()]])"/>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 62
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Hello,

    pas très logique tout ça.

    Tu veux faire un seul regroupement, donc tu as besoin de exactement un for-each-group. Pas deux, pas trois, pas zéro, un.

    Tu as besoin de gérer une seule liste de choses, et tu le fais dans un seul template, donc en utilisant seulement des boucles. Donc tu as besoin de exactement une boucle. Pas deux, pas trois, pas zéro, une.

    Tu as besoin de une boucle pour gérer ta liste, un for-each-group pour faire ton regroupement, donc ta boucle, unique, doit être un for-each-group.
    Je ne comprends pas ce que tu espérais avec tes trois boucles.

    Essaie de voir ce que ça donne avec une seule boucle, avec ce contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:value-of select="current-grouping-key()"/>
    <xsl:text>   </xsl:text>
    <xsl:value-of select="count(étudiant[cours[@sigle=current-grouping-key()]])"/>
    Gros Merci de ton temps
    Je n'avais pas le droit d'utiliser le groupeby
    voici mon résultat sans le groupeby
    <table width="400" border="1">
    <tr>

    <th scope="col">Étudiant</th>
    <th scope="col">Moyenne</th>
    </tr>


    <xsl:for-each select="université/étudiant">
    <xsl:sort select="substring-after(nom,' ')" order="ascending"/>
    <tr>
    <td><xsl:value-of select="nom"/></td>
    <td><xsl:value-of select="format-number(sum(cours/@note) div count(cours/@note),'###.0')" /> </td>
    </tr>
    </xsl:for-each>

    </table>
    La solution a vraiment évoluer de la première
    si vous voulez me dire vos commentaire ...

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

Discussions similaires

  1. Comment utiliser le ping dans un prog
    Par debutant-1 dans le forum Linux
    Réponses: 2
    Dernier message: 23/06/2006, 10h09
  2. Réponses: 4
    Dernier message: 16/02/2006, 16h28
  3. Réponses: 1
    Dernier message: 09/02/2006, 16h59
  4. Réponses: 7
    Dernier message: 25/11/2005, 17h11
  5. [C#]Comment utiliser un dataset dans plusieurs...
    Par Sonny dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/11/2005, 14h03

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