Trier dynamiquement un tableau HTML (à l'aide de XML, XSL, Javascript)

edevouge Messages postés 4 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 8 juin 2007 - 23 mai 2007 à 17:13
Pergos Messages postés 5 Date d'inscription jeudi 21 décembre 2000 Statut Membre Dernière intervention 8 février 2011 - 26 janv. 2010 à 15:22
Bonjour,


Dans le cadre d'un stage, j'ai besoins de créer un tableau html à partir d'un fichier XML et d'un fichier XSL. Et grâce au JavaScript, je voudrais que l'utilisateur puisse modifier l'ordre de tri (ASC, DESC). Je suis tombé sur un scripts ( http://xmlfr.org/listes/xml-tech/2001/01/0002.html ) que j'ai adapté à mon projet, seulement un problème mageur perssiste: le tri ne s'effectue que sur le premier caractère.


C'est à dire:
Admetons que j'ai ce fichier XML:


<Root>
      <Nombre>25</Nombre>
    <Nombre>1</Nombre>
    <Nombre>3</Nombre>
    <Nombre>8882</Nombre>
 

</Root>


Une fois la page xHtml générée on obtiendra un tri DESC de ce type: 8882,3,25,1


et un tri ASC de ce type: 1,25,3,8882


J'espère que mon exemple est clair. Le problème vient donc du fait que le critère de tri ne se base que sur le premier charactère.


Pouvez-vous m'aider?


Merci d'avance de vos réponses.

5 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
24 mai 2007 à 10:08
Bonjour,

    le tri est sur "du caractère", pas sur "du nombre"
        donc 8 (de 8888) > 3  (de 3) > 2 (de 25) > 1 (de 1)
    ° adapter la taille du champ au maxi ( en ajoutant des 0 )
    ° peut-être une option sur le tri ?
    ° ...
<hr />


Cordialement            Bul    
0
edevouge Messages postés 4 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 8 juin 2007
24 mai 2007 à 13:23
Merci pour ta réponse Bul, mais peut-tu être plus clair dans les solutions que tu propose s'il te plait?

voici mon code:

<?xml version= "1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">




<html>
 <head>
 <title>Exemple XML + XSLT + JavaScript</title>
 
<script language="JScript"><![CDATA[
 
 // Déclaration des variables
 var XSLSource = new Object();         
 var XMLSource = new Object();
 
 // Chargement des documents XML et XSL
 XMLSource = document.XMLDocument;
 XSLSource = document.XSLDocument;
 
 function tri (rubrique) {
 
  // Déclaration des variables
 var XSLSort = new  Object();           
 
 // Sélection de l'ordre xsl:sort
 XSLSort =
   XSLSource.documentElement.selectNodes("//xsl:sort");
 
  // Affectation de la rubrique de tri
 if (XSLSort[0].attributes(0).text == rubrique.toString()){
   if ( XSLSort[0].attributes(1).text == "ascending") {
     XSLSort[0].attributes(1).text = "descending";
   } else {
     XSLSort[0].attributes(1).text = "ascending";
   }
 } else {
   XSLSort[0].attributes(1).text = "ascending";
 }
 XSLSort[0].attributes(0).text = rubrique.toString();




 // affichage de l'ordre de tri
 XSLem = XSLSource.documentElement.selectNodes("///p/em");
 XSLem [0].text = rubrique.toString();
 XSLem [1].text = XSLSort[0].attributes(1).text ;
 XSimg = XSLSource.documentElement.selectNodes("//img src="");


 


 
// Réaffichage de la page
 document.body.innerHTML =
   XMLSource.transformNode(XSLSource);
}]]></script>
 </head>
 
 <!--***********.::DEBUT BODY::.************-->
 
 
  
    
    Tri sur DB par ordre descending.
     Cliquez sur un titre pour changer l'ordre de tri.
 

  
<!-- Compteur de Lignes sur la colone 'DB'-->
  Nombre de Lignes : <xsl:value-of select ="count(//DB)"/>
 


<!-- Création du tableau, réaction de la tete de tableau à la souris -->


        ----

 DB |  
           
 Reqid |

 DESCRIPTION |

       Submitted_Date |

       Start_Date |

       End_Date |

       Application |

       Wait_Duration |

       PROGRAM |

    

     <xsl:apply-templates select =\"NewDataSet/Table\"> <!-- select TABLE -->
       <xsl:sort select=\"DB\" order=\"descending\"/>
     </xsl:apply-templates>
  

 
</html>
</xsl:template>




<xsl:template match="Table">
 <tr>
   <td>
     <xsl:value-of select="DB"/>
  </td>
   <td>
     <xsl:value-of select="Reqid"/>
   </td>
   <td>
     <xsl:value-of select="DESCRIPTION"/>
   </td>
   <td>
     <xsl:value-of select="Submitted_Date"/>
   </td>
   <td>
     <xsl:value-of select="Start_Date"/>
   </td>
   <td>
     <xsl:value-of select="End_Date"/>
   </td>
   <td>
     <xsl:value-of select="Application"/>
   </td>
   <td>
     <xsl:value-of select="Wait_Duration"/>
   </td>
   <td>
     <xsl:value-of select="PROGRAM"/>
   </td>


 </tr>
 
</xsl:template>




</xsl:stylesheet>
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml:stylesheet type="text/xsl" href="tri.xsl"?>
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
24 mai 2007 à 13:54
le sort xsl ( j'ai un exemple comme ça :  <xsl:sort select= "*[name()=$field]" order="{$order}" /> )
    comporte peut-être des paramètres différents pour trier sur du numérique ?

sinon ( ce serait plus qu'étonnant !!! ) il faudrait mettre les zones =
    0001,0025,0003,8882 en supposant que 9999 est le maxi



<hr />



Cordialement                Bul    
0
edevouge Messages postés 4 Date d'inscription mercredi 23 mai 2007 Statut Membre Dernière intervention 8 juin 2007
24 mai 2007 à 15:35
Ah d'accord...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pergos Messages postés 5 Date d'inscription jeudi 21 décembre 2000 Statut Membre Dernière intervention 8 février 2011
26 janv. 2010 à 15:22
En naviguant un peu sur le sujet, j'ai trouvé ceci qui pourrait t'intéresser...
0
Rejoignez-nous