Forum Programmation.web Utilisation d'un paramètre dans xsl:sort

Posté par  .
Étiquettes : aucune
0
25
oct.
2004
Cher forum,

J'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!
  • # Une solution (si j'ai bien compris)

    Posté par  (site web personnel) . Évalué à 1.

    <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  . É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 ?

    Posté par  . Évalué à 2.


    (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...

    Posté par  . Évalué à 1.

    * 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).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.