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 :

[Débutant][XSLT] Regroupement


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut [Débutant][XSLT] Regroupement
    Bonjour, je sais que ce problème a été plusieurs fois traité, mais bien entendu je n'ai pas trouvé ce que je cherchais ou pas compris comment l'adapté
    Voici la partie du xml qui contient les données à traiter :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    <sit_liste>
    <NOM>
    <![CDATA[ Le Relais
      ]]> 
      </NOM>
    <ADRPROD_LIBELLE_COMMUNE>
    <![CDATA[ Mortemart
      ]]> 
      </ADRPROD_LIBELLE_COMMUNE>
    <ADRPROD_CP>
    <![CDATA[ 87330
      ]]> 
      </ADRPROD_CP>
    <CRITERES>
      <Crit CLEF_CRITERE="30000072" CLEF_MODA="30000349" /> 
      </CRITERES>
      </sit_liste>
    <sit_liste>
    <NOM>
    <![CDATA[ Les Chtaigniers
      ]]> 
      </NOM>
    <ADRPROD_LIBELLE_COMMUNE>
    <![CDATA[ Bellac
      ]]> 
      </ADRPROD_LIBELLE_COMMUNE>
    <ADRPROD_CP>
    <![CDATA[ 87300
      ]]> 
      </ADRPROD_CP>
    <CRITERES>
      <Crit CLEF_CRITERE="30000072" CLEF_MODA="30000070" /> 
      </CRITERES>
      </sit_liste>
    <sit_liste>
    <NOM>
    <![CDATA[ Htel la Promenade
      ]]> 
      </NOM>
    <ADRPROD_LIBELLE_COMMUNE>
    <![CDATA[ Le Dorat
      ]]> 
      </ADRPROD_LIBELLE_COMMUNE>
    <ADRPROD_CP>
    <![CDATA[ 87210
      ]]> 
      </ADRPROD_CP>
    <CRITERES>
      <Crit CLEF_CRITERE="30000072" CLEF_MODA="30000069" /> 
      </CRITERES>
      </sit_liste>
    <sit_liste>
    <NOM>
    <![CDATA[ Auberge la  Source
      ]]> 
      </NOM>
    <ADRPROD_LIBELLE_COMMUNE>
    <![CDATA[ Cieux
      ]]> 
      </ADRPROD_LIBELLE_COMMUNE>
    <ADRPROD_CP>
    <![CDATA[ 87520
      ]]> 
      </ADRPROD_CP>
    <CRITERES>
      <Crit CLEF_CRITERE="30000072" CLEF_MODA="30000070" /> 
      </CRITERES>
      </sit_liste>
    <sit_liste>
    <NOM>
    <![CDATA[ Central Htel
      ]]> 
      </NOM>
    <ADRPROD_LIBELLE_COMMUNE>
    <![CDATA[ Bellac
      ]]> 
      </ADRPROD_LIBELLE_COMMUNE>
    <ADRPROD_CP>
    <![CDATA[ 87300
      ]]> 
      </ADRPROD_CP>
    </sit_liste>
    Ce que je veux obtenir c'est un regroupement par ADRPROD_LIBELLE_COMMUNE, ce n'est pas très compliqué et je peux l'obtenir en modifiant la requête sql qui génère le XML, mais ensuite, je veux que pour chaque ADRPROD_LIBELLE_COMMUNE, la ADRPROD_LIBELLE_COMMUNE soit écrite, et qu'ensuite soit repris NOM, ADRPROD_CP et ADRPROD_LIBELLE_COMMUNE.
    J'espère avoir été clair et que vous pourrez m'aider.
    Merci d'avance !

  2. #2
    Membre éclairé
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Par défaut
    Bonjour,

    Pourrait-on avoir un bout de ton XSL afin de voir où sont tes erreurs et pourquoi une petite maquette (vite faite) du résultat que tu souhaites obtenir.

    Merci

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut Voici le XSL
    Merci de ton intérêt.
    Donc voici le xsl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <table width="100%" border="0">
    <xsl:for-each select="LEI/Resultat/sit_liste">
      <tr>
        <td width="21%"><xsl:value-of select="NOM" disable-output-escaping="yes"/></td>
        <td width="39%"><xsl:value-of select="ADRPROD_LIBELLE_COMMUNE" disable-output-escaping="yes"/></td>
        <td width="40%"><xsl:value-of select="ADRPROD_TEL" disable-output-escaping="yes"/></td>
      </tr>
     </xsl:for-each> 
    </table>
    Ce que je souhaite avoir en fait c'est :
    ADRPROD_LIBELLE_COMMUNE

    NOM
    ADRPROD_LIBELLE_COMMUNE
    ADRPROD_TEL

    et ça pour chaque NOM qui appartient à ADRPROD_LIBELLE_COMMUNE
    et bien entendu pour chaque ADRPROD_LIBELLE_COMMUNE.
    Je tiens à préciser que les ADRPROD_LIBELLE_COMMUNE sont classé par ordre alphabétiques dans la requête sql du xml.
    Merci d'avance.

    PS : J'ai tout à fait conscience que ce code est le minimal, mais je répète que je débute complètement.

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Par défaut
    Bonjour,

    Pour pouvoir afficher tout ce que tu souhaites, il va falloir te servir des templates (fonction) qui vont te permettre d'afficher toutes les données de ton XML :

    Je t'explique :

    Tu va créer ton tableau puis tu commences ta boucle (ton début m'a l'air bien) ensuite tu va créer pour chaque balise XML une fonction qui va boucler dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:template match="NOM">
    <xsl:value-of select="."/>
    </xsl:template>
    Ce code te permet de récupérer toutes les valeurs de tes balises NOM.

    Il suffit simplement que tu adaptes ce code avec ton tableau.
    Pour appeler une fonction, on se sert de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:apply-templates select="NOM"/>
    Ton code est bon, il te suffit maintenant de remplacer tout simplement tes xsl:value-of par des appels de fonction que tu auras créées au préalable.

    Bon courage.

    (P.S : n'hésite pas à chercher des réponses dans la FAQ ou dans des tutoriels du site et tu trouveras facilement la réponse à ton problème !)

    Si tu as le moindre doute ou encore la moindre question n'hésite pas !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 42
    Par défaut
    J'ai fait des recherches, j'ai essayé d'adapter du code, mais bon, ça marche pas

    Alors voici le code du xsl :

    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
     
    <body>
    <table width="100%" border="0">
    <xsl:key name="id" match="LEI/Resultat/sit_liste" use="."/>
    <xsl:template match="/">
    	<xsl:for-each select="ADRPROD_LABELLE_COMMUNE">
    	<xsl:variable name="groupe" select="."/>
    		<xsl:sort select="."/> 
    		<xsl:value-of select="."/>
    		<xsl:for-each select="NOM">
    			<xsl:if test="ADRPROD_LABELLE_COMMUNE=$groupe">
      <tr>
        <td width="21%"><xsl:value-of select="NOM" disable-output-escaping="yes"/></td>
        <td width="39%"><xsl:value-of select="ADRPROD_LIBELLE_COMMUNE" disable-output-escaping="yes"/></td>
        <td width="40%"><xsl:value-of select="ADRPROD_TEL" disable-output-escaping="yes"/></td>
      </tr>
      			</xsl:if>
      		</xsl:for-each>
     </xsl:for-each> 
     </xsl:template>
     </table>
     
    </body>
    L'idée, si j'ai bien compris, c'est de faire une première boucle sur chaque ADRPROD_LIBELLE_COMMUNE, de mettre le résultat dans une variable groupe, de refaire une boucle et pour chaque ADRPROD_LIBELLE_COMMUNE identique à la variable groupe, on affiche les données. Ca me semble simple et efficace, mais bon dans le code, ça bloque !
    Merci de m'aider.

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Par défaut
    Slt,

    Tu as déjà une erreur de frappe (due au forum ou dans ton code) :

    => <xsl:for-each select="ADRPROD_LABELLE_COMMUNE">
    => <xsl:if test="ADRPROD_LABELLE_COMMUNE=$groupe">

    Remet les en place pour voir si ca marche déjà.

    Ensuite, il te suffit de créer une fonction qui boucle sur chaque "section" sit_liste.
    A l'intérieur de celle-ci, tu mettras le contenu de la "section" Adrprod_Libelle_Commune dans une variable.
    Tu testeras ensuite si la variable est égale à la valeur de cette section, si c'est le cas tu liste les valeurs nom et adrpod_CP sinon tu ne fais rien.

    C'est normal que ton code ne fonctionne pas car tu boucles sur ta balise Nom alors que tu devrais boucles sur tes balises sit_Liste puis Adrprod_Libelle_Commune.

    Ton raisonnement est bon mais ton code a quelques lacunes.

    Essaie de retravailler ca dis moi ou tu bloques ou si ca marche.
    N'hésites pas à me reposer des questions !!
    Bon courage

Discussions similaires

  1. [XSLT]Regroupement par attribut.
    Par zserdtfg dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 08/12/2006, 11h35
  2. [XSLT] regrouper des noeuds identiques
    Par DelphLaga dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/11/2006, 17h07
  3. [XSLT] Regrouper les noeuds qui se ressemblent
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 19/10/2006, 16h51
  4. [XSLT] Regroupement ds XML
    Par Virginie dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 19/10/2006, 12h35
  5. [XSLT] Regroupement en utilsant xsl:key
    Par AVRAVR dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/07/2006, 10h02

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