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] Problème de regroupement


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 71
    Points : 53
    Points
    53
    Par défaut [XSLT] Problème de regroupement
    Bonjour,

    Voici le xml ke j'utilise:

    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
     
    <service_list>
        <service type="département">
              <nomService>Direction</nomService>
              <sous_service>Souservice1</sous_service>
              <poste>
                     <nomPoste>Poste1</nomPoste>
                     <affectation />
                     <connaissance type="Savoir-Faire">SF1</connaissance>
                     <connaissance type="Savoir-Faire">SF2</connaissance>
                     <connaissance type="Savoir-Faire">SF3</connaissance>
                     <connaissance type="Savoir-Etre">SE1</connaissance>
                     <connaissance type="Savoir">S1</connaissance>
              </poste>
              <poste>
                     <nomPoste>Poste2</nomPoste>
                     <affectation />
                     <connaissance type="Savoir">S1</connaissance>
                     <connaissance type="Savoir-Faire">SF3</connaissance>
                     <connaissance type="Savoir-Faire">SF4</connaissance>
                     <connaissance type="Savoir-Etre">SE1</connaissance>
                     <connaissance type="Savoir">S2</connaissance>
              </poste>
         </service>
    </service_list>
    J'aimerais regrouper dans un tableau pour chaque poste, les types de connaissances:Exemple:

    Poste1 :
    Savoir-Faire: SF1
    SF2
    SF3
    ...

    Poste2:
    Savoir : S1
    S2
    Savoir-Faire: SF3
    SF4
    ...


    J'ai donc ecrit ce 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
     
    <xsl:key name="group-by-type" match="connaissance" use="@type" />
    ......
    <xsl:for-each select="connaissance[generate-id() = generate-id(key('group-by-type', @type)[1])]">
    <xsl:sort select="@type" />
    	<tr>
    	<td><b><xsl:value-of select="@type" /></b></td>
    	<td>
                 <xsl:for-each select="key('group-by-type', @type)">
    		  <li><xsl:value-of select="@type" /></li>
    	     </xsl:for-each>
    	</td>
    	</tr>
    </xsl:for-each>
    J'obtiens quleque chose de ce genre
    Poste1 :
    Savoir-Faire: SF1
    SF2
    SF3
    SF3
    SF4
    Savoir : S1
    S2
    ...

    Poste2:
    ...

    Quelqu'un pourrait-il m'aider?

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    C'est bien d'utiliser une méthode Muench, mais tu as oublié une difficulté supplémentaire : ton regroupement est imbriqué à chaque poste.
    C'est une méthode Muench imbriquée, et ça c'est passablement plus ch*ant.

    La clé doit identifier non seulement sur le type de connaissance, mais aussi sur le poste auquel il appartient.

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:key name="group-by-type" match="connaissance" use="concat(generate-id(..), '/', @type)" />
    ...
    <xsl:for-each select="connaissance[generate-id() = generate-id(key('group-by-type', concat(generate-id(..), '/', @type)))]">
    <xsl:sort select="@type" />
    	<tr>
    	<td><b><xsl:value-of select="@type" /></b></td>
    	<td>
                 <xsl:for-each select="../connaissance[@type = current()/@type]">
    		  <li><xsl:value-of select="@type" /></li>
    	     </xsl:for-each>
    	</td>
    	</tr>
    </xsl:for-each>

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 71
    Points : 53
    Points
    53
    Par défaut
    Effectivement, je n'avais pas pensé à la double imbrication!
    Ta technique marche à merveille....

    Merci beaucoup!

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

Discussions similaires

  1. [XSLT]Problèmes pour regrouper selon l'attribut
    Par gharl dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 21/08/2006, 21h39
  2. [PHP][XSLT] problème caractères accentués
    Par beho dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 29/05/2006, 09h29
  3. [XSLT]Problème de séléction du noeud courrant
    Par virgul dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 16/08/2005, 07h51
  4. [XSLT]Problèmes d'ordre de lecture et d'écriture
    Par leup dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/07/2005, 10h36
  5. [XSLT] Problème de chemin d'accès + XSLT
    Par Jorus dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 15/09/2004, 08h36

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