Bonjour,
j'ai dans mon fichier.xml des elements definit par une même balise et de même attribut.
Je doit creer un menu déroulant par balise de tel sorte à ne traité que les element different.
Fichier.xml:
Code xml : 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 <musee nom="Sciences Naturelles"> <salle nom="Mammifère"> <allee ordre="Artiodactyles"> <presentoire famille="Cervidés"> <objet espece="Cerf"/> <objet espece="Cerf"/> <objet espece="Chevreuil"/> <objet espece="Daim"/> <objet espece="Caribou"/> </presentoire> <presentoire famille="Giraffidés"> <objet espece="Cerf"/> <objet espece="Girafe"/> <objet espece="Okapia"/> </presentoire> </allee> </salle> </musee>
Fichier.xsl
Code xsl : 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 <?xml version="1.0" encoding="iso-8859-1" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <html><body> <xsl:apply-templates select="*" mode="menu"/> </body></html> </xsl:template> <xsl:template match="*" mode="menu"> <br><xsl:value-of select="name()"/> </br> <br> <select name="{name()}"> <option value="Choix">choisissez</option> <xsl:apply-templates select="//*[name()=name(current())]" mode="items"/> <!-- permet d'avoir uniquement les element du même type que la balise --> </select></br> <xsl:apply-templates select="*[not(preceding::*[position()= last()])]" mode="menu"/> <!-- evite la repetition de menu identique --> </xsl:template> <xsl:template match="*" mode="items"> <option name="{@*}"><xsl:value-of select="@*"/></option> </xsl:template> </xsl:stylesheet>
le resultat est donc :
musée:
[Menu déroulant de musée comportant : Sciences Naturelles]
salle:
[Menu déroulant de salle comportant : Mammifère]
allée:
[Menu déroulant de allée comportant : Artiodactyles]
presentoire :
[Menu déroulant de presentoire comportant : Cervidés et Giraffidés]
objet :
[Menu déroulant de presentoire comportant : Cerf, Cerf, Chevreuil, Dain, Caribou, Cerf, Girafe et Okapia]
Je voudrait que le menu objet de comprenne qu'une seul fois l'occurence Cerf, donc qu'il soit :
objet :
[Menu déroulant de presentoire comportant : Cerf, Chevreuil, Dain, Caribou, Girafe et Okapia]
Comment est ce possible?
Je pense que c'est sur <xsl:apply-templates select="???" mode="items"/>
Partager