**Je n'ai fait attention qu'après qu'il y avait le forum XSLT, si un modérateur juge que ce sujet à plutôt sa place là-bas, il peut le déplacer. Désolé**
Bonjour à tous !
Je viens vers vous après un problème qui m'a occupé pratiquement tout mon weekend... Je veux faire l'index d'une FAQ.
Voici mon fichier xml :
J'aimerais obtenir ceci (note: les "entry" sans sous-rubriques vont dans DIVERS):
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 <faq> <entry> <rubrique>RubriqueA</rubrique> <titre>Problème1</titre> <contenu>Ceci est le contenu</contenu> </entry> <entry> <rubrique>RubriqueA</rubrique> <titre>Problème2</titre> <contenu>Ceci est le contenu</contenu> </entry> <entry> <rubrique sous_rubrique="Partie1" >RubriqueA</rubrique> <titre>Problème3</titre> <contenu>Ceci est le contenu</contenu> </entry> <entry> <rubrique>RubriqueB</rubrique> <titre>Problème4</titre> <contenu>Ceci est le contenu</contenu> </entry> <entry> <rubrique sous_rubrique="Partie1" >RubriqueB</rubrique> <titre>Problème5</titre> <contenu>Ceci est le contenu</contenu> </entry> </faq>
RubriqueA
Divers
Problème1Partie1
Problème2
Problème3
RubriqueB
Divers
Problème4Partie1
Problème5
J'y arrive pas trop mal, sauf que mon XSLT à un problème dans un cas particulier...
Quand j'ai deux "Entry" de "Rubrique" différentes, mais qui possèdent le même nom de "sous_rubrique" (comme c'est illustré dans l'exemple) j'obtiens ca :
Les éléments les sous-rubriques du même nom (ici "Partie1" associée au problème5 et au problème3) ne sont calculés qu'une fois. Une fois qu'elle a été trouvée dans la première rubrique, la sous rubrique ne s'affichera pas dans la rubrique suivante...RubriqueA
Divers
Problème1Partie1
Problème2
Problème3
RubriqueB
Divers
Problème4
J'utilise des Muenchians pour dédoublonner les rubriques.
Voici mon xslt :
Je suis sous XMLSpy, j'ai tenté le debug mode et je ne comprends pas pourquoi il ne va pas chercher mes sous-rubrique au second passage... pourtant ils sont présents dans la liste de noeuds quand il doit les traiter.
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
36
37 ... <xsl:key name="RUBRIQUE" match="entry" use="rubrique"/> <xsl:key name="SOUSRUBRIQUE" match="entry" use="rubrique/@sous_rubrique"/> <!--Table des matières--> <div id="TOC"> <div class="titreTOC">INDEX</div> <ul> <xsl:for-each select="//entry[generate-id() = generate-id(key('RUBRIQUE', ./rubrique)[1])]"> <xsl:sort select="rubrique"/> <li><xsl:value-of select="./rubrique/text()"/></li> <ul> <li><ul> <xsl:for-each select="//entry[rubrique=current()/rubrique/text()]"> <xsl:if test="not(current()/rubrique/@sous_rubrique)"> <xsl:apply-templates select="titre" mode="TOC"/> </xsl:if> </xsl:for-each> </ul></li> <xsl:for-each select="//entry[rubrique=current()/rubrique]"> <xsl:sort select="rubrique/@sous_rubrique"/> <xsl:for-each select="current()[generate-id() = generate-id(key('SOUSRUBRIQUE', ./rubrique/@sous_rubrique)[1])]"> <li><xsl:value-of select="./rubrique/@sous_rubrique"/></li> <ul> <xsl:for-each select="//entry[rubrique=current()/rubrique/text() and rubrique/@sous_rubrique=current()/rubrique/@sous_rubrique]"> <xsl:sort select="titre"/> <xsl:apply-templates select="titre" mode="TOC"/> </xsl:for-each> </ul> </xsl:for-each> </xsl:for-each> </ul> </xsl:for-each> </ul> </div> <!--FIN de la table des matières--> ...
Je débute encore et toujours. Ne vous étonnez pas si vous pensez que ma méthode pour générer cet index est "Dinosaure"
Sur cette FAQ, je n'ai pas de contrainte (c'est moi qui crée tout) donc je suis ouvert à d'autre propositions d'architecture ou d'algorithme.
Par contre, je suis sous XSLT 1.0
Merci d'avance !
Partager