Retourner aux forums || Retourner au forum Programmation.web
Programmation.web : Utilisation d'un paramètre dans xsl:sort
Posté par Sixel (page perso, ) le 25 octobre 2004J'essaie de retourner le problème un peu dans tous les sens, mais ça veut pas, sûrement dû à mes faibles connaissances en XSLT...
Voici ce qui me turlupine:
J'ai une longue série de noeuds, comprenant chacun une vingtaine d'attributs. Je voudrais faire un affichage de ces données en triant selon les valeurs d'un attribut donné.
La solution bourrin consiste à définir deux paramètres (un pour definir l'attribut qui servira au tri, l'autre pour le sens de tri). Mais je me trouve avec une 40aine de if, pour chaque paire {attribut,sens} possible.
Une solution plus jolie, serait de pouvoir passer ces deux paramètres à xsl:sort, un truc du genre
/xsl:param name="sortby" select="attribut_1"/
/xsl:param name="sortorder" select="ascending"/
puis
/xsl:sort select="@sortby" case-order="@sortorder"/
mais bien sûr, ça chie dans la colle...
Alors si y'a une solution miracle, ou tout simplement une manière toute bête de faire en xslt, je suis preneur!
Merci d'avance!
"Il faut" (Ezekiel 18:4) "forniquer" (Corinthiens 6:9, 10) "avec des chiens" (Thessaloniciens 1:6-9) "morts" (Timothée 3:1-10).
Une solution (si j'ai bien compris)
<xsl:for-each select="mesNoeuds">
<xsl:sort select="@monAttribut" />
<!-- mon traitement -->
</xsl:for-each>
Avec comme attribut de l'element sort:
data-type="text|number|qname"
order="ascending|descending"
En esperant avoir répondu à ta question!
Bonne chance
-
[^]Re: Une solution (si j'ai bien compris)
Posté par Sixel (page perso, ) le 25/10/2004 à 18:24. (lien). Évalué à 1.> En esperant avoir répondu à ta question!
Ben pas vraiment non... Je sais comment fonctionne xsl:sort, le problème est que je voudrais pouvoir coder ses attributs non pas en dur, mais au moyen de variables/paramètres. Ca marche pour l'attribut select grâce à [1], mais je voudrais pouvoir faire la même chose pour l'attribut order, et pourquoi pas le data-type aussi...
[1] : http://www.biglist.com/lists/xsl-list/archives/200104/msg01292.html(...)--
"Il faut" (Ezekiel 18:4) "forniquer" (Corinthiens 6:9, 10) "avec des chiens" (Thessaloniciens 1:6-9) "morts" (Timothée 3:1-10).
Comme ca ?
(xsl:template name="TMP")
(xsl:param name="SORTBY"/)
(xsl:param name="SORTORDER"/)
(xsl:sort select="$SORTBY" select="$SORTORDER")
(/xsl:template)
Pour (xsl:sort select="@sortby" case-order="@sortorder") :
@sortby et équivalent à ./@sortby ou . représente le noeud courrant dans le XML à transformer.
Note : (xsl:sort select="$SORTBY" select="$SORTORDER") et peut être à remplacer par (xsl:sort select="{$SORTBY}" select="{$SORTORDER}")
J'ai pas testé donc pas sur.
Pour info, j'ai trouvé la solution à mon problème...
* déclaration des parametres :
<xsl:param name="sortby">price</xsl:param> <xsl:param name="type">number</xsl:param> <xsl:param name="method">ascending</xsl:param>* et l'utilisation :
<xsl:sort data-type="{$type}" order="{$method}" select="@*[name() = $sortby]"/>
"Il faut" (Ezekiel 18:4) "forniquer" (Corinthiens 6:9, 10) "avec des chiens" (Thessaloniciens 1:6-9) "morts" (Timothée 3:1-10).
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.web



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.