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 une structure XML sur plusieurs critères XSLT


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 24
    Points : 13
    Points
    13
    Par défaut trier une structure XML sur plusieurs critères XSLT
    Bonjour à tous,

    Est-il possible de trier une structure XML selon plusieurs critères?
    Je m'explique :

    En entrée j'ai une structure comme celle-ci :

    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
     
    <struct>
        <structure>
            <type>PP</type>
            <element2>123</element2>
            <element3></element3>
        </structure>
        <structure>
            <type>PP</type>
            <element2>321</element2>
            <element3>E</element3>
        </structure>
        <structure>
            <type>PP</type>
            <element2>121</element2>
            <element3></element3>
        </structure>
        <structure>
            <type>PQ</type>
            <element2>654</element2>
            <element3></element3>
        </structure>
        <structure>
            <type>PQ</type>
            <element2>456</element2>
            <element3>A</element3>
        </structure>
    </struct>
    en sortie voici ce que je souhaiterai avoir :

    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
     
    <struct>
        <structure>
            <type>PQ</type>
            <element2>456</element2>
            <element3>A</element3>
        </structure>    
        <structure>
            <element1>PP</element1>
            <element2>321</element2>
            <element3>E</element3>
        </structure>
        <structure>
            <type>PP</type>
            <element2>121</element2>
            <element3></element3>
        </structure>
        <structure>
            <type>PP</type>
            <element2>123</element2>
            <element3></element3>
        </structure>
        <structure>
            <type>PQ</type>
            <element2>654</element2>
            <element3></element3>
        </structure>
    </struct>
    Autrement dit, vérifier s'il y a un élément dans la balise <element3> et si tel est le cas trier les élément selon ce critère (dans un premier temps) afin d'avoir toutes les structures ayant un element3 en tête de structure et classé dans l'ordre de valeur de l'élément3
    Ensuite trier le reste en fonction de la balise <element2> tout en ayant d'abord tous les élément de type PP et ensuite tous les élément de type PQ.

    En gros, au début de la liste il me faut tout les éléments dans l'ordre croissant des <element3>
    ET
    ensuite les structures ne possédant pas <element3> doivent être classé en fonction de la valeur de <element2> et de leur type. PP avec element2 croissant puis PQ avec element2 de type croissant.

    En espérant que quelqu'un puisse m'aider.

    D'avance merci à tous

    Cordialement

  2. #2
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Tu peux faire un truc simple à base de concat ou bien utiliser la méthode de Muench (je te laisse chercher, il y'a plein de posts là-dessus) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:for-each select="structure">
      <xsl:sort select="concat(element3, 'ZZ_', type, '_', element2)"/>
      <!-- Ton traitement -->
    </xsl:for-each>
    Le "ZZ" c'est une astuce pour le cas où élément3 serait vide, à toi de l'adapter à ta sauce si ça ne va pas totalement.
    Du coup c'est un peu de la bidouille mais ça reste simple à mettre en oeuvre. La méthode de Muench est plus rigoureuse mais plus complexe.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Merci pour la réponse.

    C'est vrai que je n'avais pas penser à ce petit moyen détourné.

    Je vais jeter un œil à la méthode de Muench si j'ai un peu de temps.

    Merci beaucoup pour les informations

    Cordialement

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

Discussions similaires

  1. Selectionner une ligne avec un max sur plusieurs critères
    Par achestyx dans le forum Développement
    Réponses: 2
    Dernier message: 31/03/2011, 10h53
  2. Comment indexer trier sur plusieurs critères
    Par pierrot67 dans le forum Bases de données
    Réponses: 9
    Dernier message: 03/05/2007, 09h19
  3. [Structure] Aide sur une structure XML (et le vocabulaire associé)
    Par projetdk40 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 14/02/2007, 10h38
  4. Réponses: 7
    Dernier message: 10/05/2006, 11h15
  5. [XSLT] - Trier un fichier sur plusieurs critères
    Par ytse dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2005, 16h26

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