Bonjour,
Après avoir lu la FAQ, exploré via Google les sites qui donnent des exemples, je ne parviens à obtenir ce que je souhaite de mon fichier XSL.
Voici un exemple de fichier XML que j'ai en entrée :
Ce que je souhaiterais en sortie :
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 <?xml version="1.0" encoding="UTF-8"?> <FICHIER> <STM> <ENS REFCONTRAT="X"> <EXE ANNEE="2005"> <CRE MNDETCRE="15EUR" /> </EXE> </ENS> <ENS REFCONTRAT="X"> <EXE ANNEE="2006"> <CRE MNDETCRE="15EUR" /> </EXE> </ENS> <ENS REFCONTRAT="Y"> <EXE ANNEE="2006"> <CRE MNDETCRE="30EUR" /> </EXE> </ENS> <STM> <FICHIER>
J'ai essayé avec la feuille de style suivante :
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 <FICHIER> <STM> <ENS REFCONTRAT="X"> <EXE ANNEE="2005"> <CRE MNDETCRE="15EUR" /> </EXE> <!-- Je regroupe les balises EXE appartenant au même contrat (ici le contrat X) --> <EXE ANNEE="2006"> <CRE MNDETCRE="15EUR" /> </EXE> </ENS> <ENS REFCONTRAT="Y"> <EXE ANNEE="2006"> <CRE MNDETCRE="30EUR" /> </EXE> </ENS> <STM> <FICHIER>
mais j'obtiens ceci :
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 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:key name="group-by-ENS" match="ENS" use="@REFCONTRAT"/> <xsl:template match="/FICHIER/STM"> <xsl:apply-templates select="ENS[generate-id(.)=generate-id(key('group-by-ENS',@REFCONTRAT)[1])]"/> </xsl:template> <xsl:template match="ENS"> <t> <xsl:copy-of select="."/> <xsl:apply-templates select="//EXE[parent::ENS/@REFCONTRAT=current()/@REFCONTRAT]"/> </t> </xsl:template> <xsl:template match="EXE"> <xsl:copy-of select="."/> </xsl:template> </xsl:stylesheet>
ce qui est presque correct : le seul problème vient de la mauvaise imbrication des balises.
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 <?xml version="1.0" encoding="UTF-8"?> <t> <ENS REFCONTRAT="X"> <EXE ANNEE="2005"> <CRE MNDETCRE="15EUR"/> </EXE> </ENS> <EXE ANNEE="2005"> <CRE MNDETCRE="15EUR"/> </EXE> <EXE ANNEE="2006"> <CRE MNDETCRE="15EUR"/> </EXE> </t><t> <ENS REFCONTRAT="Y"> <EXE ANNEE="2006"> <CRE MNDETCRE="30EUR"/> </EXE> </ENS> <EXE ANNEE="2006"> <CRE MNDETCRE="30EUR"/> </EXE> </t>
J'ai essayé d'autres méthodes (avec des for-each et autres) mais c'est ce dernier fichier XSL qui se rapproche le plus de ce que je souhaite obtenir.
Quelqu'un aurait-il une idée ? Suis-je sur la bonne voie ?
D'avance, merci.
derek.mf
Partager