Tri de nodes

Tri de nodes - XML/XSL - Programmation

Marsh Posté le 10-04-2006 à 15:28:10    

Bonjour !!
 
J'ai un fichier xml contenant :
<node1>
<numéro>xxxx</numéro>
</node1>
<node2>
<numéro>xxxx</numéro>
</node2>
....
<noden>
<numéro>xxxx</numéro>
</noden>
 
J'ai un fichier XSL qui affiche ces nodes par paquets de 20 (avec un paramètre $page qui me permet de calculer les nodes à afficher en fonction de la page en cours).
Je voudrais maintenant classer ces nodes par numéro croissant.
Actuellement je fais comme ça :
 
<xsl:apply-templates select="Node[position()>=$page][position()&lt;=20]">
<xsl:sort select="numéro"/>
</xsl:apply-templates>
 
==> les nodes sont bien classées, mais 20 par 20 et non dans leur globalité (par exemple, les nodes de 1 à 20 sont classés, idem pour 21 à 40 mais pas de 1 à 40).
 
Vous auriez des idées ?
 :jap:

Reply

Marsh Posté le 10-04-2006 à 15:28:10   

Reply

Marsh Posté le 10-04-2006 à 15:32:35    

Faut trier tous les nodes, puis les sélectionner par 20... Donc un premier apply-templates qui trie, puis qui envoi vers une template qui elle sélectionne par paquets de 20

Reply

Marsh Posté le 10-04-2006 à 15:55:16    

Exactement !
Mais je sais pas du tout comment faire :D
 
Juste derrière ce bout de code j'ai :
<xsl:template match="Node">
avec la mise en page que j'ai choisie pour les nodes
 
Donc comment faire pour trier les nodes sans pour autant traiter le "<xsl:template match="Node">" ?

Reply

Marsh Posté le 10-04-2006 à 16:19:25    

<xsl:apply-templates select="pouet">
  <xsl:sort select="pouet" order="asc" />
</xsl:apply-templates>
 
<xsl:template match="pouet">
  <xsl:if test="position() >= 0 and position() <= 20>
    ...
  </xsl:if>
</xsl>

Reply

Marsh Posté le 10-04-2006 à 18:01:52    

:jap:

Reply

Marsh Posté le 10-04-2006 à 18:57:40    

moldar a écrit :

<node1>
....
<noden>


Veux-tu dire que tes éléments s'appellent effectivement node1, node2, ... ?
 
Si c'est le cas, tu devrais plutôt considérer quelque chose du style <node id="1" />, <node id="2" />, ... C'est beaucoup plus logique dans la mesure où tes noeuds son sémantiquement équivalents (et il me semble qu'il est d'ailleurs impossible d'écrire un DTD dans le cas de la première solution). Et, bien que je n'aie jamais essayé, j'imagine que tu peux faire un <xsl:sort select="node/@id" />.

Reply

Sujets relatifs:

Leave a Replay

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