Bonjour!
Après avoir retourné maintes fois dans plusieurs sens les topics du forum je n'ai pu trouvé de solution à mon problème.
Mon but est de génerer de manière la plus génerique possible (c'est à dire sans nom explicite de noeuds) un formulaire xhtml à partir d'un fichier xml. Ce formulaire est basé sur des balises selects pour chacun des attributs, et dont les options sont les valeurs ...Mon souci est que ces valeurs présentent des doublons et je n'arrive à les supprimer par le biais de mes expressions XPath.
COmme un bout de code en dit plus que 20 lignes d'explication, en voici l'essentiel:
le fichier xml
grosso modo le fichier xsl:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <plan nature="Université" > <batiment numero="5" > <salle numero="5" type="amphi" capacite="120" x="50" y="50" /> <salle numero="6" type="amphi" capacite="120" x="50" y="75" /> <salle numero="12" type="TD" capacite="45" x="50" y="80" /> </batiment> <batiment numero="6" > <salle numero="1" type="TP" capacite="24" x="100" y="100" /> <salle numero="2" type="TP" capacite="24" x="150" y="100" /> <salle numero="3" type="amphi" capacite="120" x="120" y="100" /> </batiment> </plan>
Et voici une partie de ce qui est généré:
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 <xsl:template match="/"> <html> <body> <form id="formulaire" method="post" > <xsl:apply-templates select="//*" /> <input type="submit" name="valid" id="valid" value="soumettre" /> </form> </body> </html> </xsl:template> <xsl:template match="*[not(preceding::node()[name()=name(current())])]" > <fieldset> <xsl:variable name="nomBalise" select="name()" /> <legend><xsl:value-of select="$nomBalise" /></legend> <xsl:for-each select="@*" > <xsl:variable name="nomAttribut" select="name(current())" /> <p> <label><xsl:value-of select="$nomAttribut" /></label> <select> <xsl:apply-templates select="//*[name()=$nomBalise]/@*[name()=$nomAttribut]" /> </select> </p> </xsl:for-each > </fieldset> </xsl:template> <xsl:template match="@*" > <xsl:element name="option"> <xsl:attribute name="value"><xsl:value-of select="."/></xsl:attribute> <xsl:value-of select="."/> </xsl:element> </xsl:template>
Je voudrais que les doublons des options soient supprimés, auriez vous une solution à ce problème?j'ai eu beau tenté en stockant dans des variables et de tester leur valeur mais rien n'y fait.
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 <p> <label>type</label> <select> <option value="amphi">amphi</option> <option value="amphi">amphi</option> <option value="TD">TD</option> <option value="TP">TP</option> <option value="TP">TP</option> <option value="amphi">amphi</option> </select> </p> <p> <label>capacite</label> <select> <option value="120">120</option> <option value="120">120</option> <option value="45">45</option> <option value="24">24</option> <option value="24">24</option> <option value="120">120</option> </select> </p>
Merci!
P;S: soyez indulgent je débute en xsl /xpath
Partager