[XSLT] Regroupement et méthode Muench
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 :
Code:
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> |
Ce que je souhaiterais en sortie :
Code:
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> |
J'ai essayé avec la feuille de style suivante :
Code:
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> |
mais j'obtiens ceci :
Code:
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> |
ce qui est presque correct : le seul problème vient de la mauvaise imbrication des balises.
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 ? 8O
D'avance, merci.
derek.mf