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 :

Trier dans un template avec paramètres


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 218
    Points : 91
    Points
    91
    Par défaut Trier dans un template avec paramètres
    Bonjour à tous,

    J'ai un souci de tri dans un code xsl et j'aimerai avoir votre avis.

    l'XML source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <root>
       <sortFieldName>date</sortFieldName>
       <sortDirection>ascending</sortDirection>
       <data>
          <values>
          ...
          </values>
       </data>
    </root>
    Voila donc sur base du XML ci-dessus, j'aui dans mon code xsl ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:apply-template select="//values">
       <xsl:sort select="sortFieldName" order="sortDirection"/>
    </xsl:apply-template>
    Et donc cela ne fonctionne pas car dans ce cas-ci il n'accepte pas d'autre valeur que ascending|descending pour le parametres order.
    Donc j'ai essayé avec des variables avant le tag apply-template mais là les valeurs sont inconnues dans le tag xsl:sort
    Enfin j'ai essayé avec les variables dans le tag apply-template mais là les variables sont vides car je ne suis plus au même niveau.

    Bref je ne sais plus que faire, pourriez-vous m'aider ?

    D'avance merci beaucoup
    Stijava

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Je te propose de passer par des xsl:if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:if test="sortDirection='ascending'">
    <xsl:apply-templates select="//values">
       <xsl:sort select="sortFieldName" order="ascending"/>
    </xsl:apply-templates>
    </xsl:if>
    <xsl:if test="sortDirection='descending'">
    <xsl:apply-templates select="//values">
       <xsl:sort select="date" order="descending"/>
    </xsl:apply-templates>

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 218
    Points : 91
    Points
    91
    Par défaut
    La solution est intéressante mais le problème est que la valeur pour le select du xsl:sort (en l'occurence sortFieldName) se trouve 2 niveau plus haut que le niveau courant et que malgér une bonne initialisation dans une variable, la valuer n'est pas connue dans le select du xsl:sort.

    soit si j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <xsl:if test="sortDirection='ascending'">
    <xsl:apply-templates select="//values">
       <xsl:sort select="???????" order="ascending"/>
    </xsl:apply-templates>
    </xsl:if>
    Comment savoir que la valeur pour les ??????? est correcte ?

    Merci d'avance pour l'aide.

    Cordialement,
    Stujava

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Essaie cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:if test="sortDirection='ascending'">
    <xsl:variable name="field" select="sortFieldName"/>
    <xsl:apply-templates select="//values">
       <xsl:sort select="*[name()=$field]" order="ascending"/>
    </xsl:apply-templates>
    </xsl:if>

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2004
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 218
    Points : 91
    Points
    91
    Par défaut
    Et bien un tout grand merci à datrinite, la dernière solution proposée est exactement ce qu'il me fallait.

    Encore mille merci

    Stujava

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/02/2014, 16h37
  2. [2.x] Include template avec paramètres variable pas tjs disponible
    Par jfsenechal dans le forum Symfony
    Réponses: 1
    Dernier message: 15/09/2011, 12h02
  3. Réponses: 1
    Dernier message: 05/05/2011, 10h58
  4. trier dans un formulaire avec une liste déroulante
    Par FENUA CLIM dans le forum IHM
    Réponses: 2
    Dernier message: 04/08/2008, 08h45
  5. Réponses: 15
    Dernier message: 21/08/2006, 01h41

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