Bonjour à tous,
je sèche gravement sur une transformation :
voilà ma structure "plate" Xml actuelle :
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 <root> <gdtitre>...</gdtitre> <titre niv="1">premier titre 1</titre> <p>....</p> <p>....</p> <autrelement>...</autrelement> <titre niv="1">deuxieme titre 1</titre> <p>....</p> <p>....</p> <autrelement>...</autrelement> <titre niv="2">premier titre 2</titre> <p>....</p> <autrelement>...</autrelement> <titre niv="2">deuxième titre 2</titre> <p>....</p> <autrelement>...</autrelement> <titre niv="1">troisième titre 1</titre> <p>....</p> <autrelement>...</autrelement> </root>
l'objectif est d'avoir une structure hiérarchisée et regroupée de type
ici dans mon exemple je n'ai que 2 niveaux d'imbrication mais je suis censé en gérer d'autre (voir ne pas savoir combien il y en a ...
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 <body> <titreUd>...</titreUd> <texte niv="1"> <titre>premier titre 1</titre> <p>....</p> <p>....</p> <autrelement>...</autrelement> </texte> <texte niv="1"> <titre>deuxieme titre 1</titre> <p>....</p> <p>....</p> <autrelement>...</autrelement> <texte niv="2"> <titre>premier titre 2</titre> <p>....</p> <autrelement>...</autrelement> </texte> <texte niv="2"> <titre>deuxième titre 2</titre> <p>....</p> <autrelement>...</autrelement> </texte> </texte> <texte niv="1"> <titre>troisième titre 1</titre> <p>....<p> <autrelement>...</autrelement> </texte> </body>
A ce jour j'arrive a faire le regroupement par niveau de texte mais pas l'imbrication hierarchique ...
Voici mon code :
qui donne le resultat suivant :
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 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:key name="fils" match="*" use="generate-id(preceding-sibling::titre[1])"/> <xsl:template match="root"> <body> <xsl:apply-templates/> </body> </xsl:template> <xsl:template match="titreUd"> <titreUd> <xsl:apply-templates/> </titreUd> </xsl:template> <xsl:template match="*" mode="regrouper"> <xsl:choose> <xsl:when test="name(.)='titre'"/> <xsl:otherwise> <xsl:copy-of select="."/> </xsl:otherwise> </xsl:choose> </xsl:template> <xsl:template match="titre"> <texte> <xsl:attribute name="niv" select="./@niv"/> <titre> <xsl:value-of select="."/> </titre> <xsl:apply-templates select="key('fils',generate-id())" mode="regrouper"/> </texte> </xsl:template> <xsl:template match="*"> </xsl:template> </xsl:stylesheet>
Si quelqu'un pouvait me donner un coup de main ...
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 <body> <titreUd>Mon UD</titreUd> <texte niv="1"> <titre>premier titre 1</titre> <p>....</p> <p>....</p> <autrelement>...</autrelement> </texte> <texte niv="1"> <titre>deuxieme titre 1</titre> <p>....</p> <p>....</p> <autrelement>...</autrelement> </texte> <texte niv="2"> <titre>premier titre 2</titre> <p>....</p> <autrelement>...</autrelement> </texte> <texte niv="2"> <titre>deuxième titre 2</titre> <p>....</p> <autrelement>...</autrelement> </texte> <texte niv="1"> <titre>troisième titre 1</titre> <p>....</p> <autrelement>...</autrelement> </texte> </body>
Partager