[Xpath] Eviter le traitement des noeud avec même attribut
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:
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:
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"/>