Travailler sur des données qui doivent être triées
Salut,
Je voudrais savoir comment faire pour travailler sur des données après qu'elles soient triées par <xsl:sort>.
En pratique, j'ai une liste de fonctions :
Code:
1 2 3 4 5 6 7 8 9 10
| <categorie nom="Fonctions générales" id="generale">
<fonction page="lisp" nom="Lisp">Convertit une expression en expression
au format LISP</fonction>
<fonction page="sign" nom="Signe">Signe d'un élément</fonction>
<fonction page="abs" nom="Abs">Valeur absolue</fonction>
<fonction page="min" nom="Min">Minimum de deux expressions</fonction>
<fonction page="max" nom="Max">Maximum de deux expressions</fonction>
<fonction page="opposite" nom="Oppose">Opposé d'un élément</fonction>
<fonction page="more_less" nom="PlusMoins">Plus ou moins une valeur</fonction>
</categorie> |
On va dire qu'on y accède via "document('fct.xml')/categorie".
Je les affiche donc par :
Code:
1 2 3 4 5 6
| <xsl:for-each select="document('fct.xml')/categorie/fonction">
<xsl:sort select="@nom" />
<li>
<a href="{@page}.php" title="{.}"><xsl:value-of select="@nom" /></a>
</li>
</xsl:for-each> |
Super, c'est trié !
Mainteant, plus dur : trouver la fonction suivante et précédente, sachant que la fonction actuelle est identifiée par sa page ($page) : "fonction[@page=$page]" ... dans la liste triée !
Pour trouver la fonction suivante, non triée c'est un truc du style :
Code:
1 2 3
|
<xsl:variable name="fct_cate" select="document('fct.xml')/categorie" />
<xsl:value-of select="$fct_cate/fonction[@page=$page]/following-sibling::*[1]/@page" /> |
Pour la précédente, on prend : on utilise "preceding-sibling::*[1]".
@+ Haypo