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 :

groupe au sein d'un groupe


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 108
    Par défaut groupe au sein d'un groupe
    Bonjour,

    Je n'arrive pas à trouver la solution, pour effectuer un regroupement d'un noeud sans qu'il soit cité à chaque tri au sein d'un groupe. La réponse est certainement basique mais c'est ma premiére manipe dans ce langage

    Mon fichier xml

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet href="transform-3_par_massif.xsl" type="text/xsl"  ?>
    <MASSIF>
      <Voies>
        <Id>0</Id>
        <Cotation>6b</Cotation>
        <Massif>Mont Blanc</Massif>
        <NomDeVoie>La directe</NomDeVoie>
        <Situation>test ..........</Situation>
      </Voies>
      <Voies>
        <Id>1</Id>
        <Cotation>7a</Cotation>
        <Massif>Mont Blanc</Massif>
        <NomDeVoie>La diagonale</NomDeVoie>
        <Situation>plus bas...</Situation>
      </Voies>
      <Voies>
        <Id>2</Id>
        <Cotation>7a+</Cotation>
        <Massif>Mont Blanc</Massif>
        <NomDeVoie>Mister speed</NomDeVoie>
        <Situation>Face Est</Situation>
      </Voies>
      <Voies>
        <Id>3</Id>
        <Cotation>6c</Cotation>
        <Massif>Mont Blanc</Massif>
        <NomDeVoie>La voie normale</NomDeVoie>
        <Situation>Face Ouest</Situation>
      </Voies>
        <Voies>
        <Id>4</Id>
        <Cotation>6b</Cotation>
        <Massif>Mont Blanc</Massif>
        <NomDeVoie>La Lachenale</NomDeVoie>
        <Situation>Face Sud</Situation>
      </Voies> 
      </MASSIF>
    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
    31
    32
    33
    34
    35
    36
    37
    38
    <?xml version="1.0" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes" />
     
    <!-- recherche des cotations par Massif pour chaque cotation -->
     
    <xsl:key name="byMassif" match="Voies" use="Massif" />
     
    <xsl:template match="MASSIF"> 
       <ul>
     
       <!-- genere un id pour chaque valeur de cotation et mise en forme -->
     
         <xsl:for-each select="bloc[generate-id() = generate-id(key('byMassif', Massif)[1])]" >
            <xsl:sort select="Massif " />
            <div style="background-color:#b0c4de;"> 
                 Massif : <xsl:value-of select="Massif" /> <hr/>
            </div>
                  <div> 
                          <xsl:for-each select="key('byMassif', Massif)" >
     
                          <xsl:sort select="Cotation"/>
     
                             <div style="position:relative; top:-10px;left:50px;"><br/>  
                                  <xsl:value-of select="Cotation" />
                             </div>     
                             <div style="position:relative; top:-10px;left:50px;">
                                   <ul>                               
                                    	<li> <xsl:value-of select="NomDeVoie" /> </li>  
                                    	<li> description: <xsl:value-of select="Situation" /></li><br/>                                
                                   </ul>                                
                             </div>
                          </xsl:for-each> 
                 </div> 
         </xsl:for-each> 
       </ul> 
    </xsl:template>
    </xsl:stylesheet>
    J'obtiens le résulat suivant :

    Mont Blanc

    6b La directe

    6b La Lachenale

    6c La voie normale

    7a La diagonale

    7a+ Mister speed


    Voici le resultat souhaité:

    Mont Blanc

    6b La directe
    6b La Lachenale

    6c La voie normale

    7a La diagonale

    7a+ Mister speed


    Merci pour vos pistes de reflexions

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    En XSLT 1.0 ce n'est pas basique, non.

    Tu as déjà remarqué que faire un simple regroupement n'est pas évident. Faire un regroupement à l'intérieur d'un autre est abominable.

    Pour un simple regroupement, tu as utilisé un <xsl:key>. Pour un double regroupement il t'en faut deux.

    La première sert à regrouper par massif, donc porte sur le massif, très bien.
    La deuxième doit regrouper par cotation, mais à l'intérieur d'un massif donné. Elle doit donc porter à la fois sur le massif et sur la cotation.

    Quelque chose comme <xsl:key name="cote" match="Voies" use="concat(Massif, '/', Cotation)" />.
    Là je mets un / mais tu peux utiliser autre chose si tu as peur que les massifs ou cotations peuvent contenir un /
    Ensuite ça s'utilise pareil, en faisant à nouveau le concat() correspondant pour sélectionner les couples massif/cotation uniques.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 108
    Par défaut
    Bonjour ,

    Je suis parti sur la base de XSLT 1.0 a vu des exemple de grouping trouvés sur le net.
    Si XLST 2.0 est plus commode je suis prêt à l'adopter je n'ai pas de contrainte particulière.

    Cependant, j'ai beaucoup de difficulté à intégrer le positionnement des balises pour que
    la moulinette fonctionne ......

    Serait-ce abuser de te demander de me préciser où placer le bout de code que tu suggéres?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:key name="cote" match="Voies" use="concat(Massif, '/', Cotation)" />
    Merci.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par christian.bleau Voir le message
    Si XLST 2.0 est plus commode je suis prêt à l'adopter je n'ai pas de contrainte particulière.
    Carrément, lui il a <xsl:for-each-group> qui est fait pour ça.

    Citation Envoyé par christian.bleau Voir le message
    Serait-ce abuser de te demander de me préciser où placer le bout de code que tu suggéres?
    À côté de l'autre <xsl:key>. Peu importe où précisément, ce n'est qu'une déclaration, l'essentiel c'est qu'elle existe.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 108
    Par défaut
    Je ne capte rien à la logique de ce langage, je n'y arrive pas.
    Je suis une tanche mais c'est pas grave.

    Effectivement en 2.0 j'avais repéré le
    <xsl:for-each-group>
    Je me contenterai de ces redondances.

    Merci bien.

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Tout de même, avec for-each-group, c'est pas compliqué de faire des for imbriqués. Ça existe dans tous les langages, ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 11
    Dernier message: 29/05/2015, 12h19
  2. Compte au sein d'un groupe
    Par Angie1500 dans le forum SAS Base
    Réponses: 12
    Dernier message: 01/06/2012, 15h19
  3. Tri au sein d'un groupe
    Par LuckyLuke56 dans le forum FastReport
    Réponses: 5
    Dernier message: 13/10/2009, 08h25
  4. Réponses: 3
    Dernier message: 16/08/2006, 16h05
  5. traiter les groupes retourné par la requête GROUP BY
    Par mgemc2 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/08/2006, 13h16

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