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 :

est il possible de faire un trie sur un paramètre donné


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut est il possible de faire un trie sur un paramètre donné
    voilà j'ai essayer ça et ca marche pas!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:apply-templates select="collectionproduit/produitA | collectionproduit/produitB">
    <xsl:sort select="$trie"/>
    </xsl:apply-templates>
    on ne peut pas passer de variable à un select de sort???
    il ne met pas d'erreur mais C mal trié!!
    Si on ne peut pas comment je vais faire???

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    dans le "select" de ton tri tu doit mettre une balise fille de "produitA" et "produitB"

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut
    Je ne comprend pas ce que tu veut dire
    Ce que je ne comprend pas c'est que quand je met directement la valeur au lieu de la variable, et bien là ca marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:sort select="prix">
    et pourtant je suis sur que ma variable avant vallait prix car je l'affiche comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TRIE:<xsl:value-of select="$trie"/>
    : : :

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    c'est parce que ta variable contient la chaine de caractère "prix" alors qu'il faut mettre le noeud xml "prix"

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut
    OK dac je veut bien mais comment???

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 29
    Points
    29
    Par défaut
    Tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:sort select="*[name()=$tri]"/>

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut
    OK Super MERCI beaucoup!!!!!!!!!!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 73
    Points : 66
    Points
    66
    Par défaut
    OK j'ai un autre problème sur la même ligne

    j'essaie de mettre un ordre qui est donné en paramètre mais ca marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:sort select="*[name()=$trie]" order="string($ordre)"/>

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 34
    Points : 29
    Points
    29
    Par défaut
    Oui en effet je ne vois pas trop car l'attribut odre ne peux pas contenir de variable , peut être avec un test sur la valeur de ta variable $ordre...
    je ne sais pas quel noeud precède ton <xsl:sort> mais à supposer que ce soit un <xsl:for-each select="truc">, alors on aurait envie de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:for-each select="truc">
      <xsl:choose>
        <xsl:when test="$ordre='ascending'">
           <xsl:sort select="*[name()=$trie]" order="ascending"/>
           <!-- ...des trucs à faire ici... -->
        <xsl:when/>
        <xsl:when test="$ordre='descending'">
           <xsl:sort select="*[name()=$trie]" order="descending"/>
            <!-- ...les même trucs à faire ici... -->
        <xsl:when/>
      </xsl:choose>
    </xsl:for-each>
    Mais ça ne marcherai pas car <xsl:sort> doit être directement situé sous le <xsl:select>, il ne peut pas y avoir de <xsl:choose> ou quoique ce soit d'autre entre les deux...

    Voila ce que je te propose (y a peut être des solutions plus rusées...?)
    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
    <xsl:for-each select="truc">
    <xsl:choose>
      <xsl:when test="$ordre='ascending'">
         <xsl:for-each select="truc">
           <xsl:sort select="*[name()=$trie]" order="ascending"/>
           <!-- ...des trucs à faire ici... -->
         </xsl:for-each>
       <xsl:when/>
       <xsl:when test="$ordre='descending'">
           <xsl:for-each select="truc">
             <xsl:sort select="*[name()=$trie]" order="descending"/>
             <!-- ...les même trucs à faire ici... -->
           </xsl:for-each>
        <xsl:when/>
      </xsl:choose>
    Mais on peut encore améliorer : ci dessus tu devra faire un copier/coller de <!-- ...des trucs à faire ... --> puisque c'est la même choses, ce qui n'est pas recommandé (si tu changes qqchoses tu dois le faire dans les 2, pas cool )
    Tu peux apeller un template qui fera le trucs

    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
    <xsl:for-each select="truc">
    <xsl:choose>
      <xsl:when test="$ordre='ascending'">
         <xsl:for-each select="truc">
           <xsl:sort select="*[name()=$trie]" order="ascending"/>
           <xsl:call-template name="trucAfaire" select="."/>
         </xsl:for-each>
       <xsl:when/>
       <xsl:when test="$ordre='descending'">
           <xsl:for-each select="truc">
             <xsl:sort select="*[name()=$trie]" order="descending"/>
             <xsl:call-template name="trucAfaire" select="."/>
           </xsl:for-each>
        <xsl:when/>
      </xsl:choose>
    Et qqpart ailleurs (sous <xsl:stylesheet>) le template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template name="trucAfaire">
      <!-- ...des trucs à faire ici... -->
    </xsl:template>
    Ca fais beaucoup de choses pour mettre en paramètre l'odre d'un tri mais perso je ne vois pas d'ot solutions là comme ça.
    Au fait, tout ce code n'est pas du tout testé...
    en espèrant que ça t'ira ?
    a+
    matt

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/10/2010, 12h06
  2. Réponses: 1
    Dernier message: 25/03/2009, 11h07
  3. Est il possible de faire un trigers sur la date ?
    Par mehdi_scofield dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/11/2008, 09h47
  4. Réponses: 4
    Dernier message: 24/10/2007, 14h57
  5. Est il possible de faire un cursor sur une procédure stocké ?
    Par berceker united dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/09/2007, 16h47

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