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 :

liste liant plusieurs noeuds [XSLT 2.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Points : 48
    Points
    48
    Par défaut liste liant plusieurs noeuds
    Bonjour,

    J'ai un fichier XML du genre:
    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
     
    <cours>
      <id>c1</id>
      <departement>d1</departement>
      <groupe>g1</groupe>
    </cours>
    <cours>
      <id>c2</id>
      <departement>d1</departement>
      <groupe>g1</groupe>
    </cours>
    <cours>
      <id>c3</id>
      <departement>d1</departement>
      <groupe>g2</departement>
    </cours>
    <cours>
      <id>c4</id>
      <departement>d2</departement>
      <groupe>g3</groupe>
    </cours>
    .....
    Je voudrais a partir de ces infos afficher une liste qui reprend les groupes et les département. Cela doit donner quelque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    d1
      g1
      g2
    d2
      g3
    J'arrive a afficher les departements via un for-each-group mais pas a y associer les groupes.

    Est ce que quelqu'un aurait la gentillesse de m'aider?

    Merci

    Mickael

  2. #2
    Membre du Club
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Points : 48
    Points
    48
    Par défaut liste liée
    Personne ne sait m'aider??

  3. #3
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Cela peut s'achever, si vous voulez, avec deux clés et un template d'ou le nom de l'element à matcher est le parent des "cours". Mais son nom n'est pas connu parce que vous n'avez pas montré dont j'y ai mis *[cours] qui peut paraître un peu cryptique mais qu'il reste marcher tout à fait.
    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
    <xsl:key name="depgpliste" match="cours" use="concat(departement, '#', groupe)" />
    <xsl:key name="depliste" match="cours" use="departement" />
     
    <xsl:template match="*[cours]">
        <ul>
        <xsl:for-each select="cours[generate-id()=generate-id(key('depliste',departement)[1])]">
            <xsl:sort select="departement" />
            <li>
            <xsl:value-of select="departement" />
                <ul>
                <xsl:for-each select="../cours[
                    generate-id()
                    =
                    generate-id(
                        key('depgpliste',concat(current()/departement,'#',groupe))[1]
                    )
                ]">
                    <li>
                    <xsl:value-of select="groupe" />
                    </li>
                </xsl:for-each>
                </ul>
            </li>
            </xsl:for-each>
        </ul>
    </xsl:template>

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je viens de voir ça:
    J'arrive a afficher les departements via un for-each-group mais pas a y associer les groupes.
    Si vous voulez utiliser xslt 2.0 stricte, ainsi ne plus soutenir xslt 1.0, avec des éléments comme xsl:for-each-group, on peut faire comme ç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
    <xsl:template match="*[cours]">
        <ul>
        <xsl:for-each-group select="cours" group-by="departement">
            <xsl:sort select="departement" />
            <li>
                <xsl:value-of select="departement" />
                <ul>
                <xsl:for-each-group select="../cours[departement=current()/departement]" group-by="groupe">
                    <li>
                        <xsl:value-of select="groupe" />
                    </li>
                </xsl:for-each-group>
                </ul>
            </li>
        </xsl:for-each-group>
        </ul>
    </xsl:template>
    ou quelque variant de ça.

  5. #5
    Membre du Club
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 53
    Points : 48
    Points
    48
    Par défaut liste noeuds lies
    Super, cela fonctionne

    Grand merci

    Mickael

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    On pouvait quand même remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select="../cours[departement=current()/departement]"
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select="current-group()"
    C'est fait pour, après tout -_-°.

  7. #7
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    par

    Code :Sélectionner tout - Visualiser dans une fenêtre à part
    select="current-group()"

    C'est fait pour, après tout -_-°.
    C'est vrai et c'est plus v2.0-iste. Merci pour en noter. J'étais trop m'en préoccupé de faire passer avec continuité de v1.0 à v2.0... Voici un re-liste de cette variation.
    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
    <xsl:template match="*[cours]">
        <ul>
        <xsl:for-each-group select="cours" group-by="departement">
            <xsl:sort select="departement" />
            <li>
                <xsl:value-of select="departement" />
                <ul>
                <xsl:for-each-group select="current-group()" group-by="groupe">
                    <li>
                        <xsl:value-of select="groupe" />
                    </li>
                </xsl:for-each-group>
                </ul>
            </li>
        </xsl:for-each-group>
        </ul>
    </xsl:template>

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/04/2007, 18h11
  2. Réponses: 14
    Dernier message: 26/05/2006, 18h45
  3. Réponses: 4
    Dernier message: 23/09/2005, 13h29
  4. [Struts]Affiche d'une liste sur plusieurs pages
    Par guillaume_85 dans le forum Struts 1
    Réponses: 3
    Dernier message: 24/06/2005, 20h23
  5. [MFC] Classer une liste a plusieur colonne
    Par Kevgeii dans le forum MFC
    Réponses: 8
    Dernier message: 07/03/2005, 15h09

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