Bonjour, bonsoir
voila petit probleme de modification de mon fichier XML via ma feuille de style XSL
mon but est de partir d'un fichier xml comme ca
et de generer le meme fichier XML mais seulement avec les libre dont le prix est le plus bas, du style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <livres> <BD nom="Mu" librairie="lib2" prix="20"/> <BD nom="La ballade de la mer salée" librairie="lib2" prix="15"/> <BD nom="Mu" librairie="lib1" prix="21"/> <roman nom="Les taupes" librairie="lib2" prix="16"/> <roman nom="Les gens de smiley" librairie="lib3" prix="11"/> <BD nom="Mu" librairie="lib3" prix="16"/> <roman nom="Les taupes" librairie="lib1" prix="19"/> </livres>
pour cela j'utilise la feuille de style suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <livres> <BD nom="La ballade de la mer salée" librairie="lib2" prix="15"/> <roman nom="Les taupes" librairie="lib2" prix="16"/> <roman nom="Les gens de smiley" librairie="lib3" prix="11"/> <BD nom="Mu" librairie="lib3" prix="16"/> </livres>
donc l'idée c de parcourir toute les balises ou le nom est le meme et d'afficher la balise seulement si son prix est le plus petit
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 <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" indent="yes" encoding="ISO-8859-1" /> <xsl:template match="*"> <xsl:variable name="prix" select="@prix" /> <xsl:variable name="nom" select="@nom" /> <xsl:variable name="minprix" select="@prix"/> <xsl:for-each select="*/@nom[name() = $nom]"> <xsl:if test="$prix <= @prix"> <!-- <= signifie inférieur ou egal --> <xsl:variable name="minprix" select="@prix"/> </xsl:if> </xsl:for-each> <xsl:if test="$prix <= $minprix"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:if> </xsl:template> <xsl:template match="text()"> <xsl:value-of select="."/> </xsl:template> <xsl:template match="@*"> <xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute> </xsl:template> </xsl:stylesheet>
mais ca marche pas du tout, si quelqu'un a une idée ca m'aiderait pas mal (c'est meme peut etre une simple de syntaxe je suis pas tres bon en xsl :s)
merci d'avance
Partager