Bonjour,
voilà je souhaite faire un tri au sein d'une balise <for:each...>.
Pour cela j'utilise la balise <xsl:sort..>.
D'abord mon fichier xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <racine> <row acs="1.7" libelle="Morteau CRD" indicateur1="Truc" valeur1="13" unite1="" indicateur2="Machin" valeur2="50" unite2="" indicateur3="Chose" valeur3="47" unite3="" indicateur4="Bordel" valeur4="190" unite4="" /> </racine
Voici la partie du xsl posant problème :
Si j'effectue un tri sur le "libelle" -> aucun prob.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <xsl:for-each select="racine/row"> <xsl:sort select="@indicateur1" order="ascending" data-Type="number"/> <tr> <td class="11px" align="center"><xsl:value-of select="@libelle"/></td> <!-- template générant les autres colonnes--> <xsl:call-template name="colonne"> <xsl:with-param name="debut" select="1" /> <xsl:with-param name="fin" select="$nbColonne" /> </xsl:call-template> </tr> </xsl:for-each>
Par contre si j'effectue un tri sur 'indicateur1', colonne construite dans le template, --> pas de tri. Ca marche pas.
Voici mon template :
Je suis obligé d'utiliser ce template pour fabriquer de manière générique mes colonnes. En effet le nombre d'attributs 'indicateur', 'valeur' et 'unite' est indétermminé.
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 <xsl:template name="colonne"> <xsl:param name="debut" select="0" /> <xsl:param name="fin" select="0" /> <xsl:param name="nomValeur" select="concat('valeur',$debut)" /> <xsl:param name="nomUnite" select="concat('unite',$debut)" /> <!-- colonne du tableau --> <td class="11px" align="right"><xsl:value-of select="@*[name()=$nomValeur]"/><xsl:text> </xsl:text> <xsl:value-of select="@*[name()=$nomUnite]"/></td> <xsl:if test="$debut < $fin"> <xsl:call-template name="ligne"> <xsl:with-param name="debut" select="($debut)+1" /> <xsl:with-param name="fin" select="$fin" /> </xsl:call-template> </xsl:if> </xsl:template>
Si quelqu'un a une idée ... merci !
Partager