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 :

Regroupement de Muench [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Regroupement de Muench
    Bonjour à tous !

    J'ai ceci en entrée :

    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
    <DETAILSSS>
    	<DETAIL LINE="1" TYP=A">
    		<DONNEE_A>aaa</DONNEE_A>
    		<DONNEE_B>bbb</DONNEE_B>
    		<DONNEE_C>
    			<DONNEE_D>ccc</DONNEE_D>
    			<DONNEE_E>111</DONNEE_E>
    		</DONNEE_C>
    	</DETAIL>
    	<DETAIL LINE="2" TYP=A">
    		<DONNEE_A>abc</DONNEE_A>
    		<DONNEE_B>bcd</DONNEE_B>
    		<DONNEE_C>
    			<DONNEE_D>cccaaa</DONNEE_D>
    			<DONNEE_E>111</DONNEE_E>
    		</DONNEE_C>
    	</DETAIL>
    	<DETAIL LINE="3" TYP=B">
    		<DONNEE_A>aaabbb</DONNEE_A>
    		<DONNEE_B>bbbttt</DONNEE_B>
    		<DONNEE_C>
    			<DONNEE_D>ccczzz</DONNEE_D>
    			<DONNEE_E>222</DONNEE_E>
    		</DONNEE_C>
    	</DETAIL>
    </DETAILSSS>
    Que j'aimerais transformer en quelque chose de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <INFO DONNEE_E=111>
    	<LINE 1 DONNEE_A=aaa DONNEE_B=bbb/>
    	<LINE 2 DONNEE_A=abc DONNEE_B=bcd/>
    </INFO>
    <INFO DONNEE_E=222>
    	<LINE 3 DONNEE_A=aaabbb DONNEE_B=bbbttt/>
    </INFO>

    Mon problème c'est que je n'arrive pas à appliquer mon template :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:key name="groups" match="/DETAILSSS/DETAIL" use="DONNEE_C/DONNEE_E" />
    <xsl:apply-templates select="DETAILSSS"/>
    <xsl:template match="DETAILSSS">
    	<xsl:apply-templates select="result[generate-id() = generate-id(key('groups', DONNEE_C/DONNEE_E)[1])]"/>
    </xsl:template>
    <xsl:template match="DETAIL">
            <xsl:element INFO>
            <xsl:attribute name="DONNEE_E"><xsl:value-of select="DONNEE_C/DONNEE_E"/></xsl:attribute>
            <xsl:for-each select="key('groups', DONNEE_C/DONNEE_E)">
                        <xsl:attribute name="DONNEE_A"><xsl:value-of select="../../DONNEE_A"/></xsl:attribute>



    Bref je pense que je suis sur la bonne voie, cependant je n'arrive pas à appliquer le template, rien ne s'affiche, aucun élément INFO.
    Je ne sais pas comment l'appeler en fait, ou alors ma méthode n'est pas la plus adéquate.

    Auriez vous une idée ?

    Merci à vous !

  2. #2
    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
    La définition de key est bien fait. Apart ça, plein de problèmes. Je n'insiste pas les fautes de frappe ou les imbalance de guillemets, le problème le plus grave semble les sorties désirée <Line 1 ... n'est pas bon du tout. Si vous vouliez dire Line1, Line2 etc (sans un espace intercalé) avec 1, 2 etc provenant de l'attribute @LINE, je dirais tout de suite que les valeurs d'un attribut ne sont pas forcément apte à se faire un composant d'un nom d'élément... il faut faire grande attention de se garder envers cette possibilité. En tout cas, je mets une version simple pour garder envers l'existence des espaces dans leur valeur- et vous modifiez le comme vous voulez.

    Voici une façon de le faire.
    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
    <xsl:key name="groups" match="/DETAILSSS/DETAIL" use="DONNEE_C/DONNEE_E" />
    <xsl:template match="/">
        <xsl:apply-templates select="DETAILSSS"/>
    </xsl:template>
    <xsl:template match="DETAILSSS">
        <xsl:apply-templates select="DETAIL[generate-id() = generate-id(key('groups', DONNEE_C/DONNEE_E)[1])]"/>
    </xsl:template>
    <xsl:template match="DETAIL">
        <xsl:element name="INFO">
            <xsl:attribute name="DONNEE_E"><xsl:value-of select="DONNEE_C/DONNEE_E"/></xsl:attribute>
            <xsl:for-each select="key('groups', DONNEE_C/DONNEE_E)">
                <xsl:element name="{concat('LINE', translate(@LINE, ' ', ''))}">
                    <xsl:attribute name="DONNEE_A"><xsl:value-of select="DONNEE_A"/></xsl:attribute>
                    <xsl:attribute name="DONNEE_B"><xsl:value-of select="DONNEE_B"/></xsl:attribute>
                </xsl:element>
            </xsl:for-each>
        </xsl:element>
    </xsl:template>

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup je vais essayer votre solution.

    Oui il y a des fautes de frappes car j'ai recopié mon code un peu hâtivement, sans faire un copier/coller car j'ai supprimé énormément de passage

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    C'était bien ça. Sujet Résolu.
    Merci tsuji

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

Discussions similaires

  1. [XSLT 1.0] regroupement (muench, xpath?)
    Par fab22 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 24/05/2012, 16h33
  2. [XSLT] Regroupement et méthode Muench
    Par derek.mf dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 06/12/2006, 16h25
  3. Regroupement par mois
    Par fplanglois dans le forum SQL
    Réponses: 7
    Dernier message: 29/07/2003, 16h32
  4. Regrouper 3 requêtes dans une seule
    Par LadyArwen dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/06/2003, 09h32
  5. regrouper deux tables
    Par Shabata dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/05/2003, 15h02

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