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 en fonction d'un paramètre


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut [XSLT] Tri en fonction d'un paramètre
    Bonjour,

    Voila j'aimerais faire un tri en fonction d'un paramètre qu'on m'envoie dans mon xsl

    Si Sort= 0 rien ne se passe(pas de tri)

    Un bout de mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xsl:for-each select="Personal/Person[$Validonly = 0 or ($Validonly = 1 and @valid = '1')]">
    <xsl:choose>
    <xsl:when test="$Sort=1">
    <xsl:sort order="ascending" data-type="number" select="Eigenschaft/@EigNr"/><xsl:sort order="ascending" data-type="text" lang="fr" select="PersDaten"/></xsl:when>
    <xsl:when test="$Sort=2">
    <xsl:sort order="ascending" data-type="text" lang="fr" select="PersDaten"/></xsl:when>
    </xsl:choose>
    Le problème est que ca me fait une erreur car il doit apparement être fils de for-each ou d'un apply-template!!!

    Quelqu'un aurait-il une brilliante pour résoudre ce problème? Sinon je ferai trois template différent mais ca m'embête un peux!

    Merci de votre aide

    ++

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  2. #2
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Allez y a personne qu'a une idée a part faire trois template différent?

    Si c'est pas possible y a quelqu'un qui peux me le confirmer?


    Merci

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  3. #3
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    utilise un xsl:apply-templates plutôt qu'un xsl:for-each, et inclus dedans le xsl:sort.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  4. #4
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    pour ce xsl j'utilise de call-template(qui sont externaliser dans un xsl a part et introduit par un include)

    car c'est un fo et je préfère externaliser toute le table plutot que seulement le contenu

    et si je faisais un apply-template ce ne marcherais pas de toute facon car j'aurais toujours ma table dedans qui se voit normalement qu'un fois et le sort ne pourrait pas agir. A moins que j'externalise encore plus le contenu(faire encore un autre template) faut que je réfléchisse

    Mais en faite plus j'y pense a ton idée et plus je me dit que je pourrai quand même l'utiliser bon faut que j'essaye...

    Merci en tout cas de la proposition et je te redonne de nouvelle

    ++

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  5. #5
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Ouais c'est vrai ca va pas mal ton idée GrandFather merci encore une fois!!!

    Mais maintenant j'ai quand même une question est-il possible de dire que ceux qui n'ont rien dans la balise (d'ou on défini le tri) soit automatiquement mis a la fin? Mettre descending ne m'arrange pas car si je fais ca tout le reste est aussi a l'envers!!!

    ou bien faudrait leur mettre une valeur genre zzz et après ne pas les afficher(ces zzz)?

    ou encore faire une boucle pour ceux qui ont une fonction et après une autre pour ceux sans! Mais la une question : Peut-on tester s'il y n'y a rien dans la balise? Je voudrais une condition du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="node()[pas(Eigenschaft/@EigNr)]">
    pas() = pas cette élément (ou vide)!

    Merci pour votre aide!!

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  6. #6
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Ok j'ai opté pour la 2ème possibilités

    Mais alors comment testé si mon noeud n'est pas la!

    Si je prend mon 2ème for-each pour mettre ceux qui n'on pas de foonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each select="node()[pas(Eigenschaft/@EigNr)]>

    Merci pour votre aide
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  7. #7
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Tu peux traiter le problème en deux phases, une première triée l'autre pas. Ca devrait donner un truc comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:apply-templates select="Personal/Person[($Validonly = 0 or ($Validonly = 1 and @valid = '1')) and Eigenschaft/@EigNr]"> 
      <xsl:sort order="ascending" data-type="number" select="Eigenschaft/@EigNr"/>
      <xsl:sort order="ascending" data-type="text" lang="fr" select="PersDaten"/>
    </xsl:apply-templates>
    <xsl:apply-templates select="Personal/Person[($Validonly = 0 or ($Validonly = 1 and @valid = '1')) and not(Eigenschaft/@EigNr)]"/>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  8. #8
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Ok merci c'est super cool!

    mais un truc comme ca va pointer les deux fois sur le même template (<xsl:template match="Personal/Person">)


    ou faut faire deux template différent avec les condition (<xsl:template match="Personal/Person[($Validonly = 0 or ($Validonly = 1 and @valid = '1')) and Eigenschaft/@EigNr]"> )

    Merci beaucoup

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  9. #9
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Si dans les deux cas, les éléments Person sont traités de la même manière, autant utiliser un seul template. Sinon, il sera plus simple de passer par les "mode".
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  10. #10
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    T'es le meilleur GrandFather toujours une solution sous la main!!!

    De plus la j'ai vraiment appris un truc que je ne savais pas!!!

    ++

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

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

Discussions similaires

  1. [XSLT] [PHP 5] fonction position()
    Par sharper dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 01/12/2005, 12h58
  2. [VBA-E] Tri en fonction de lettre
    Par Deejoh dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/10/2005, 16h12
  3. [xslt] TRI d'un champs
    Par virgul dans le forum XSL/XSLT/XPATH
    Réponses: 15
    Dernier message: 26/08/2005, 17h01
  4. Réponses: 6
    Dernier message: 24/02/2005, 09h44
  5. Erreur sur une fonction avec des paramètres
    Par Elois dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 05/05/2004, 21h00

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