IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[Noob] Problème de double xsl:sort


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut [Noob] Problème de double xsl:sort
    Bonjour a tous et a toutes,

    voici mon problème, je voudrais afficher des href selon un ordre bien précis, et triés par groupes, pour cela je dispose de deux champs spécifiques dans mes noeuds dont voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <functions>
       <row>
    	<col>1</col>
    	<col>1</col>
    	<col>Go to reporting</col>
    	<col>1</col>
    	<col>main\reporting\reporting.html</col>
    	<col></col>
    	<col>1</col>
    	<col>Reporting</col>
       </row>
    ....
    </functions>
    Chacun de ces futures href possèdent en col[7] un nombre qui va spécifier l'ordre d'affichage du lien dans mon menu, et en col[8] le group auquel il appartient, le tout dans le but de trier efficassement mes fonctions.

    col[1] est l'ID de ce lien dans ma DB.

    Pourquoi ce tri?
    Tout simplement parce que je peux avoir dans ma DB le lien N° 3 avec l'ID 1 et le lien N°2 avec l'ID 2, le lien N°1 avec l'ID 4, ...
    Le tout dans le but de pouvoir moi même changer l'orde d'affichage de ces lien lorsque je le décide.

    Voici mon sort (qui ne trie rien ce dit en passant! ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <xsl:template match="/functions">
      <ul>
        <xsl:apply-templates select="row">
               <xsl:sort select="col[7]" order="ascending" data-type="number"/>
               <xsl:sort select="col[8]" order="ascending" data-type="text"/>
        </xsl:apply-templates>
      </ul>
    </xsl:template>
    <xsl:template match="/functions">
      <li>
        <xsl:text>MENU_ORDER</xsl:text>
        <xsl:text>MENU_GROUP</xsl:text>
      </li>
        <xsl:for-each select="row">
      <li>
        <xsl:value-of select="col[7]"/>
        <xsl:value-of select="col[8]"/>
      </li>
      </xsl:for-each>
    </xsl:template>
    Voici le résultat affiché pour le moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    MENU_ORDER   MENU_GROUP
    1                     Outsourcer
    1                     Reporting
    1                     Upload
    2                     Outsourcer
    2                     Upload
    3                     Upload
    4                     Upload
    5                     Upload
    6                     Upload
    7                     Upload
    Et moi ce que je voudrais c'est un affichage comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    MENU_ORDER   MENU_GROUP
    1                     Outsourcer
    2                     Outsourcer
    1                     Reporting
    1                     Upload
    2                     Upload
    3                     Upload
    4                     Upload
    5                     Upload
    6                     Upload
    7                     Upload
    J'espère avoir été clair sur ce que je cherche a faire, je vous remercie d'avance pour votre aide, car je bloque quelque peu je l'avoue, de plus l'XSL n'est pas ma tasse de thé, je n'en fait que depuis peu.

    Merci a vous, ciao

  2. #2
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    J'ai trouvé une solution, que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
      <xsl:template match="functions">
        <xsl:apply-templates>
        <xsl:sort select="col[7]" data-type="number" order="ascending"/>
        <xsl:sort select="col[8]" data-type="text"/>
        </xsl:apply-templates>
      </xsl:template>
    <xsl:template match="row">
    <html>
        <body>
      	<h1>My CD Collection</h1> 
    	<table border="1">
    		<tr bgcolor="#9acd32">
      			<th>Menu_Order</th> 
      			<th>Menu_Group</th> 
      		</tr>
    		<tr>
    		  <td>
      		       <xsl:value-of select="col[7]"/> 
      		 </td>
    		 <td>
     		       <xsl:value-of select="col[8]"/> 
      		 </td>
      		</tr>
      	</table>
        </body>
      </html>
    </xsl:template>
     
    </xsl:stylesheet>
    Le seul problème c'est qu'il m'affiche mon <table> autant de fois que j'ai de noeuds col, comment puis je faire pour éviter cela? et qu'il m'affiche tous les résultats dans un seul <table> : :

    Si je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <xsl:template match="functions">
    <html>
        <body>
      	<h1>My CD Collection</h1> 
    	<table border="1">
    		<tr bgcolor="#9acd32">
      			<th>Menu_Order</th> 
      			<th>Menu_Group</th> 
      		</tr>
      		<xsl:for-each select="row">
    		<tr>
    		  <td>
      		       <xsl:value-of select="col[7]"/> 
      		 </td>
    		 <td>
     		       <xsl:value-of select="col[8]"/> 
      		 </td>
      		</tr>
      		</xsl:for-each>
      	</table>
        </body>
      </html>
    </xsl:template>
    il me renvoie un seul tableau, mais le tout n'est plus trié correctement, en sortie j'obtient ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    MENU_ORDER   MENU_GROUP 
    9                     Outsourcer 
    1                     Reporting 
    2                     Upload 
    3                     Upload 
    4                     Upload 
    5                     Upload 
    6                     Upload 
    7                     Upload
    10                   Outsourcer  
    8                     Upload
    Et je voudrais obtenir ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    MENU_ORDER   MENU_GROUP 
    1                     Reporting 
    2                     Upload 
    3                     Upload 
    4                     Upload 
    5                     Upload 
    6                     Upload 
    7                     Upload
    8                     Upload 
    9                     Outsourcer
    10                   Outsourcer
    Si vous avez une idée merci a vous, je vous remercie,

  3. #3
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    Bon voilà j'ai trouvé une solution a mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    <xsl:template match="/functions">
    <html>
     <body>
      <h2>My CD Collection</h2> 
    <table border="1">
    <tr bgcolor="#9acd32">
      <th>Menu_Order</th> 
      <th>Menu_Group</th> 
      </tr>
     <xsl:for-each select="row">
          	 <xsl:sort select="col[7]" data-type="number" order="ascending"/> 
     	 <xsl:sort select="col[8]" data-type="text" order="ascending"/> 
    <tr>
    <td>
      <xsl:value-of select="col[7]" /> 
      </td>
    <td>
      <xsl:value-of select="col[8]" /> 
      </td>
      </tr>
      </xsl:for-each>
      </table>
      </body>
      </html>
      </xsl:template>
    Ce qui trie enfin correctement mes données.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSL] sort... y a t il un sens?
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 24/01/2006, 16h11
  2. [JSP]Problème de double soumission d'un formulaire
    Par jgfa9 dans le forum Servlets/JSP
    Réponses: 31
    Dernier message: 24/08/2005, 11h54
  3. [XSL] Arbres intermédiaires avec xsl:sort ?
    Par Blustuff dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/07/2005, 10h09
  4. [XSL] xsl:sort avec parametre et condition
    Par elraton dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/01/2005, 20h59
  5. xsl:sort
    Par Pierre63 dans le forum XMLRAD
    Réponses: 2
    Dernier message: 03/07/2003, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo