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 :

[XSLT] Tri ascending OK, Tri descending KO


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 857
    Points : 884
    Points
    884
    Par défaut [XSLT] Tri ascending OK, Tri descending KO
    Bonjour,

    Je suis entrain de m'arracher les cheveux.
    J'applique une transformation XSLT à un fichier XML par composant Java. Sur mes entêtes de colonne, j'ai un bouton qui me permet de trier mes données. Le tri ascending fonctionne sur toutes les colonnes mais pas le tri descending...
    Pourtant j'ai posé des alertes qui m'indiquent bien à chaque chargement de la page le bon champ trié et le bon sens de ce tri.
    Ci-dessous une partie du code, pour voir si quelqu'un peut me donner une piste... Mais j'ai bien peur que ce ne soit pas très lisible...

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
      <xsl:output method="html" encoding="ISO-8859-1" indent="yes"/>
     
      <!-- Parametres d entrees -->
      <xsl:param name="champTri"/>
      <xsl:param name="sensTri"/>
      ...
      <!-- Fin Parametres d entrees -->
     
      <xsl:template match="root">
      <html>
        <head>
      ...
     
      <xsl:variable name="newSensTri">
        <xsl:if test="$sensTri=''">ascending</xsl:if>
        <xsl:if test="$sensTri='ascending'">descending</xsl:if>
        <xsl:if test="$sensTri='descending'">ascending</xsl:if>
      </xsl:variable>
     
      <!-- Champs caches -->
      <input type="hidden" name="ChampTri" value="{$champTri}"/>
      <input type="hidden" name="SensTri" value="{$sensTri}"/>
      <input type="hidden" name="FilterValue" value="{$filterValue}"/>
      <input type="hidden" name="FileName" value="{$fileName}"/>
      ...
      <tr>
      <table cellspacing="0" cellpading="0" class="tabEntCol">
      <tr>
        <td width="100%" nowrap="nowrap">Libellé long</td>
        <td>
         <script>btnTriJS("btnTri0",0,2,0,"tri('Libelle-long','<xsl:value-of select="$newSensTri"/>')");</script>
        </td>
       </tr>
    </table>
     
        <!-- Pour Chaque ligne -->
        <xsl:for-each select="*[child::*[name()=$filterKey and contains(text(),$filterValue)] and position() &gt; $enregDeb and position() &lt; $enregDeb+$nbEnregPage+1]">
          <!-- tri -->
          <xsl:sort select="*[name()=$champTri]" order="{$sensTri}"/>
     
        ...
        </xsl:for-each>
    ...
    </xsl:template>
     
    </xsl:stylesheet>
    Peut être un XML pour que ce soit plus clair.
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <root>
      <Structure>
        <ID>|D_STRUCT060000000019|1|</ID>
        <Libelle-long lien="1">salvetat</Libelle-long>
        <Code-categorie visible="0">EHPADC</Code-categorie>
        <Libelle-Categorie>EHPAD commercial</Libelle-Categorie>
      </Structure>
      <Structure>
        <ID>|D_STRUCT060000000017|1|</ID>
        <Libelle-long lien="1">Bernard Menez</Libelle-long>
        <Code-categorie visible="0">ACCOMPS</Code-categorie>
        <Libelle-Categorie>Accompagnement social</Libelle-Categorie>
      </Structure>
      <Structure>
        <ID>|D_STRUCT060000000016|1|</ID>
        <Libelle-long lien="1">SAVS test bilan</Libelle-long>
        <Code-categorie visible="0">ACCOMPS</Code-categorie>
        <Libelle-Categorie>Accompagnement social</Libelle-Categorie>
      </Structure>
    </root>
    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:variable name="newSensTri">
        <xsl:if test="$sensTri=''">ascending</xsl:if>
        <xsl:if test="$sensTri='ascending'">descending</xsl:if>
        <xsl:if test="$sensTri='descending'">ascending</xsl:if>
      </xsl:variable>
    c'est deja un peu zarbi ça , pourquoi l'inversion ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 857
    Points : 884
    Points
    884
    Par défaut
    Citation Envoyé par Erwy
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:variable name="newSensTri">
        <xsl:if test="$sensTri=''">ascending</xsl:if>
        <xsl:if test="$sensTri='ascending'">descending</xsl:if>
        <xsl:if test="$sensTri='descending'">ascending</xsl:if>
      </xsl:variable>
    c'est deja un peu zarbi ça , pourquoi l'inversion ?
    C'est pour fournir à la fonction JavaScript le nouveau sens du tri. Si je suis trié en ascending, le prochain click devra être du descending et vice versa.
    Comme dans cet exemple fourni.

  4. #4
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    ta variable newsenstri tu l'utilise ?

    et pourquoi ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="hidden" name="ChampTri" value="{$champTri}"/>
      <input type="hidden" name="SensTri" value="{$sensTri}"/>
    Je dis ça parce que ce code me fait penser à des paramètres qui serait mal passé/sauvegarder

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 857
    Points : 884
    Points
    884
    Par défaut
    Citation Envoyé par Erwy
    ta variable newsenstri tu l'utilise ?
    Oui bien sûr. Elle est utilisée dans la fonction Javascript pour fournir le nouveau sens du tri.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script>btnTriJS("btnTri0",0,2,0,"tri('Libelle-long','<xsl:value-of select="$newSensTri"/>')");</script>
    Citation Envoyé par Erwy
    et pourquoi ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input type="hidden" name="ChampTri" value="{$champTri}"/>
      <input type="hidden" name="SensTri" value="{$sensTri}"/>
    Cela me sert à stocker ces variables là et à les récupèrer si un autre traitement est effectué sur cette page (Naviguer de page en page)

    Citation Envoyé par Erwy
    Je dis ça parce que ce code me fait penser à des paramètres qui serait mal passé/sauvegarder
    C'est possible, mais le truc bizarre c'est que le tri ascending marche sur toutes les colonnes et que le tri descending lui ne marche pas.

  6. #6
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    pourrais tu fournir le html, le xslt et un petit xml , enfin l'ensemble de ce qu'il faut pour faire tourner ton code , en piece jointe.
    Il va falloir faire qq test pour savoir si ca viens du javascript ou du xslt, en tout cas cela necessite trop de boulot pour que j'ai le temps de le resoudre d'apres ce que tu donnes sur le forum (si le pb y est )

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 857
    Points : 884
    Points
    884
    Par défaut
    Je me doutais bien que sans avoir tout le code cela serait très difficile.

    Un petit rappel de ce que je fais et comment je le fais.

    Depuis une page JSP, je passe des paramètres à 1 composant Java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
        transform.setSensTri(Utiles2.getChaineNotNullSinon(request.getParameter("SensTri"),""));
        transform.setChampTri(Utiles2.getChaineNotNullSinon(request.getParameter("ChampTri"),""));
    ...
     
    sResult =  transform.transformeXSL(request.getParameter("FileName"),false);
    qui applique via "javax.xml.transform.*" une transformation XSL à un fichier XML.

    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
     
          // Charge le XSL
          TransformerFactory tFactory = TransformerFactory.newInstance();
          StreamSource ss = new StreamSource(sFileXSL);
          Transformer transformer = tFactory.newTransformer(ss);
     
          // Type de transformation (XML, HTML, )
          //transformer.setOutputProperty(OutputKeys.METHOD,"xml");
     
          // Passage de paramètres
          transformer.setParameter("champTri",this.getChampTri());
          transformer.setParameter("sensTri",this.getSensTri());
          ....
     
          StringWriter swOut = new StringWriter();
          transformer.transform(new StreamSource(sFileXML),new StreamResult(swOut));
    Ce résultat est ensuite fourni à l'objet Response, dans la JSP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    response.getOutputStream().write(sResult.getBytes());
    response.flushBuffer();
    Ci-joint les fichiers JSP, XML et XSL.
    Fichiers attachés Fichiers attachés

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 857
    Points : 884
    Points
    884
    Par défaut
    Citation Envoyé par Erwy
    pourrais tu fournir le html, le xslt et un petit xml , enfin l'ensemble de ce qu'il faut pour faire tourner ton code , en piece jointe.
    Il va falloir faire qq test pour savoir si ca viens du javascript ou du xslt, en tout cas cela necessite trop de boulot pour que j'ai le temps de le resoudre d'apres ce que tu donnes sur le forum (si le pb y est )
    As-tu eu le temps de jeter un coup d'oeil Erwy ?

  9. #9
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    non, je commence juste

Discussions similaires

  1. [XL-2007] Tri ascendant et remplacement des premières valeurs
    Par cirestore dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/10/2013, 10h27
  2. tri ascendant de 4 colonnes
    Par biddal dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/08/2011, 15h47
  3. [XSLT] Gros souci de tri sur structure arborescente
    Par stujava dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 25/03/2010, 17h49
  4. Tri ascendant et decendant d'un dbgrid
    Par nou366 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 07/05/2006, 09h18
  5. INSERTION / tri ascendant ou descendant, ou mettre a la fin
    Par oravelon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 05/08/2005, 11h15

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