[XSL:sort] select="variable" = rien

select="variable" = rien [XSL:sort] - XML/XSL - Programmation

Marsh Posté le 07-09-2005 à 15:45:39    

Bonjour à tous,
 
Problème incompréhensible pour le débutant en XML et XSL que je suit :
 
Je souhaite trier l'affichage de mon fichier XML selon une colonne précisée dans le premier noeud de du fichier XML (balise

Code :
  1. <TRI> colonne = "B" </TRI>

par exemple).
 
Dans le fichier XSL j'ai cette structure :
 

Code :
  1. <xsl:variable name="col" select="NewDataSet/Tri" />
  2.  <xsl:value-of select="$col" />
  3.   <xsl:variable name="truc" select="concat('@', $col)" />
  4.   <xsl:value-of select="$truc" />
  5.  <table cellspacing="0" cellpadding="0" rules="all" border="0" id="DataGridList" style="border-width:0px;width:100%;border-collapse:collapse;">
  6.  <xsl:for-each select="NewDataSet/CUST">
  7.   <xsl:sort select="$truc" />
  8. ...


 
qui me permet :
- de récupérer la colone de tri dans la balise XML
- de la concaténer avec un @ pour ensuite selectionner l'attribut à choisir pour la colonne
- de vérifier que j'ai bien la colonne selectionnée en l'affichant
- puis je commence le tableau en triant selon la colonne indiquée
 
Sauf que... ça trie pas
 
 
La variable $truc contient pourtant

Code :
  1. @B

puisque je l'affiche auparavant.
Et si je mets (en dur)

Code :
  1. <xsl:sort select="@B" />

ça trie.
 
 
Si qqun peut m'expliquer ce qu'il manque  :jap:


---------------
Who LeT The Guilz OuT ? WhO ? wHo ? Who ??
Reply

Marsh Posté le 07-09-2005 à 15:45:39   

Reply

Marsh Posté le 08-09-2005 à 09:16:06    

alien_nan a écrit :

il te manque au moins l'order et le data-type :
 

Code :
  1. <xsl:sort
  2. select="expression"
  3. lang="language-code"
  4. data-type="text|number|qname"
  5. order="ascending|descending"
  6. case-order="upper-first|lower-first"/>


 
bon courage :hello:


 
edit : j'ai un peu repondu a cote. Par contre, tu ne peux pas trier sur la variable, car elle ne contient qu'une valeur, et il evalue le contenu au sens 'litteral' de cette derniere (pour lui, il cherche a trier une chaine @B ). C'est a dire qu'elle n'est pas ré-affecté de la valeur de ton attribut B à chaque boucle. J'espere que j'ai été assez précis.

Reply

Marsh Posté le 08-09-2005 à 11:17:35    

Si j'ai bien compris, je devrais tester la variable avant le tri dans le style :
 
si $var = "@B" ...xsl:sort select="@B"
si $var = "@C" ...xsl:sort select="@C"
etc...
 
?
 
Les tutos que j'ai suivi parlent en général d'une mauvaise gestion des varaibles avec XSL, c'est dommage... :/


---------------
Who LeT The Guilz OuT ? WhO ? wHo ? Who ??
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed