Recursivité pour construire une hiérarchie
Bonjour,
Je dois construire une hererchie imbriquée, à partir d'une structure a seulement deux niveaux pere - fils.
Une des difficultés que je rencontre est d'identifier le premier niveau car il n'y a pas de balise ou d'attribut particulier pour l'identifier.
Voici la structre, en exemple:
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 27 28 29
|
<events>
<event>
<father>A11111</father>
<sons>
<son>B22222</son>
<son>B33333</son>
<son>B44444</son>
</sons>
</event>
<event>
<father>B22222</father>
<sons>
<son>C22222</son>
<son>C33333</son>
<son>C44444</son>
</sons>
</event>
<event>
<father>B33333</father>
<sons>
<son>D22222</son>
<son>D33333</son>
<son>D44444</son>
</sons>
</event>
</events> |
Et le résultat que je cherche à obtenir:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
<container id="A11111">
<container id="B22222">
<item>C22222</item>
<item>C33333</item>
<item>C44444</item>
</container>
<container id="B33333">
<item>D22222</item>
<item>D33333</item>
<item>D44444</item>
</container>
<item>B44444</item>
</container> |
Sachant que les balises events ne sont pas forcément ordonnées dans l'ordre de la hierarchie, evidemment...
je comprend bien qu'il faut faire une structure recursive, mais je ne sais pas comment identifier
je suis parti sur un apply template:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
<xsl:template match="events">
<xsl:apply-templates select="event"/>
<xsl:template/>
<xsl:template match="event">
<container>
<xsl:value-of select="father"/> <!-- Comment identifier que c'est la structure de plus haut niveau ? -->
</container>
<xsl:for-each select="sons/son">
<!-- identifier si le fils a des fils, si non -->
<item><xsl:value-of select="."/></item>
<!-- si oui, recursivité sur l'element -->
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template> |
mais la je suis bloqué...