Rechercher : dans
Par :

Xslt - sort en utilisant une variable

Dernière réponse le 6 nov 2005 à 22:18:16 smellems, le 6 nov 2005 à 20:56:34 
 Signaler ce message aux modérateurs

Boujour,
je veux faire une page en xlst et je veux trier mon fichier xml selon une variable dans une boucle for...

<xsl:template match="/">
<xsl:for-each select="sites/site">
...
...
<xsl:variable name="cote" select="$points div $total"/>

<xsl:sort select="$cote"/> ERREUR

</xsl:for-each>

donc je ne sais pas ou placer <xsl:sort select="$cote"/>

merci de votra aide...

Meilleures réponses pour « xslt sort en utilisant une variable » dans :
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...
Permuter deux variables sans utilisation d'une variable temp VoirUtilisation de pointeurs Le code #include void change(int *,int*); int main () { int a=2,b=5; printf("Avant : a=%d,b=%d\n",a,b); change(&a,&b); printf("Apres : a=%d,b=%d\n",a,b); return 0; } void change(int...
Langage C++ - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C++ sont typées, c'est-à-dire que les données contenues dans...
Javascript - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Cette notion de sous-programme est généralement appelée fonction...
Variables d'environnement VoirVariables d'environnement Une variable d'environnement est une valeur dynamique, chargée en mémoire, pouvant être utilisée par plusieurs processus fonctionnant simultanément. Sur la plupart des systèmes d'exploitation, les emplacement de...

1

crabs, le 6 nov 2005 à 21:56:00
  • +1

Salut,
Cela n'est pas possible directement sauf si tu peux calculer directement ta
valeur de tri sur des arguments ou des éléments du noeud site.

Dans le cas contraire, il faut faire 2 transformations 1 qui fait les calculs, 1 qui
fait le tri. Mais pour les calculs y a mieux que XSLT, faut mieux revoir la
génération du XML

Exemple vis à vis de la première 'option':
Fichier XML

<?xml version="1.0" encoding="iso-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="sort_calc.xsl" ?>
<sites>
 <site nom="1" vu="30" vote="3"/>
 <site nom="2" vu="30" vote="20"/>
 <site nom="3" vu="20" vote="3"/>
 <site nom="4" vu="40" vote="20"/>
</sites>

Fichier XSL:
<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
<xsl:output encoding="iso-8859-1" method="html"
    doctype-public="-//W3C//DTD HTML 4.01//EN"
    doctype-system="http://www.w3.org/TR/html4/strict.dtd" />

<xsl:template match="/">
<html>
<head><title>XML: tri avec calcul</title></head>
<body>
<table style="width:80%;">
    <tr>
        <th style="width:25%;">site</th>
        <th style="width:25%;">vote</th>
        <th style="width:25%;">vu</th>
        <th style="width:25%;">ratio</th>
    </tr>
    <xsl:for-each select="sites/site">
        <xsl:sort select="@vote div @vu" data-type="number" order="descending"/>
        <tr>
            <td style="text-align:center;"><xsl:value-of select="@nom"/></td>
            <td style="text-align:center;"><xsl:value-of select="@vote"/></td>
            <td style="text-align:center;"><xsl:value-of select="@vu"/></td>
            <td><xsl:value-of select="@vote div @vu"/></td>
        </tr>
    </xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs

2

 smellems, le 6 nov 2005 à 22:18:16

Merci...

j'aimais mieux mon beau petit calcul:

<xsl:variable name="r1" select="rang/r1"/>
<xsl:variable name="r2" select="rang/r2"/>
<xsl:variable name="r3" select="rang/r3"/>
<xsl:variable name="r4" select="rang/r4"/>
<xsl:variable name="r5" select="rang/r5"/>
<xsl:variable name="total" select="$r1+$r2+$r3+$r4+$r5"/>
<xsl:variable name="points" select="$r1+(2*$r2)+(3*$r3)+(4*$r4)+(5*$r5)"/>
<xsl:variable name="cote" select="$points div $total"/>

mais maintenant ça fonctionne avec...

<xsl:sort select="(rang/r1 + (2*rang/r2) + (3*rang/r3) + (4*rang/r4) + (5*rang/r5)) div (rang/r1 + rang/r2 + rang/r3 + rang/r4 + rang/r5)"/>

Répondre à smellems