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 sur la totalité des enregs [FAQ]


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 : 45
    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 sur la totalité des enregs
    Bonjour et Meilleurs voeux pour cette nouvelle année !

    J'applique une transformation XLST sur un fichier XML afin de le représenter sous la forme d'un tableau HTML, ce tableau HTML peut être trié par chaque colonne et peut être limité en nombre de lignes.
    Pour le tri et la limitation du nombre de ligne j'ai procédé comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
          .......
        <!-- Pour Chaque ligne -->
        <xsl:for-each select="*[position() &gt; $enregDeb and position() &lt; $enregFin+1]">
          <!-- tri -->
          <xsl:sort select="*[name()=$champTri]" order="{$sensTri}"/>
          .......
    Hors là je tri que les enregistrements sélectionnés dans ma limitation du nombre de ligne.
    En gros j'aimerais que mon tri se fasse avant ma limitation du nombre de ligne à afficher, soit sur la totalité du fichier XML; mais je ne sais pas comment faire...

    Merci d'avance.

  2. #2
    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,

    c'est pour une pagination, j'imagine ?

    Il faut tricher un peu pour que ça fonctionne. Le problème est que position() pointe sur la liste de noeud sélectionnée dans l'ordre du document, pas sur la liste de noeud sélectionnée triée. Tu ne peux donc pas trier et filtrer en même temps, il faut procéder en plusieurs temps :

    1. Faire un for-each sur tous les noeuds
    2. Trier
    3. Appliquer le traitement sur le noeud courant uniquement lorsque la valeur de position() est dans la plage à afficher

    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:for-each select="*">
          <!-- tri -->
          <xsl:sort select="*[name()=$champTri]" order="{$sensTri}"/>
          <!-- Filtrage -->
          <xsl:variable name="counter" select="position()" />
          <xsl:if test="$counter &gt; $enregDeb and $counter &lt; $enregFin+1">    
             <!-- Traitement -->
             ...
          </xsl:if>
    </xsl:for-each>
    La subtilité est que position() renvoie la position du noeud courant dans l'ordre du document, et pas dans l'ordre de tri. Mais en l'occurrence, ça n'a pas d'importance.
    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

  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 : 45
    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
    C'est tellement logique !

    Merci beaucoup.

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

Discussions similaires

  1. [XSLT] test sur le commencement des valeurs des attributs
    Par mimiche_fr2000 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2008, 13h03
  2. [Oracle] Tris sur des jointure externes
    Par roychris dans le forum Langage SQL
    Réponses: 6
    Dernier message: 28/04/2006, 05h25
  3. [XSLT] boucler sur des attributs
    Par damyrid dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 30/03/2006, 10h43
  4. tri sur des champs calculés
    Par Thib dans le forum Bases de données
    Réponses: 10
    Dernier message: 18/10/2005, 17h24
  5. Recherche et tri sur des doublons XSLT
    Par MusSDev dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 01/06/2005, 09h27

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