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 avec xsl:sort [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut trier avec xsl:sort
    Bonsoir,
    j'aimerais afficher par ordre alphabétique le nom de tous les produits commandés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:output method="html"/>
        <xsl:template match="client">
            <xsl:for-each select="produit">
                <xsl:sort select="nom" />
                <xsl:value-of select="nom"/> <br/>
            </xsl:for-each>
     
         </xsl:template>
        </xsl:stylesheet>
    le fichier XML
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    <?xml version="1.0" encoding="UTF-8"?>
    <commande>
        <client>
            <nom>Société A</nom>
            <adresse>3, rue des tourterelles </adresse>
            <ville>Reims</ville>
            <produit>
                <nom>Carte mère Asus</nom>
                <code>CMASUSA7V</code>
                <prixunit>40</prixunit>
                <quantite>1</quantite>
                <prixtotal>40</prixtotal>
            </produit>
            <produit>
                <nom>Processeur XP 2600+</nom>
                <code>XP26+</code>
                <prixunit>50</prixunit>
                <quantite>1</quantite>
                <prixtotal>50</prixtotal>
            </produit>
            <produit>
                <nom>Boitier Morex</nom>
                <code>BTMo54</code>
                <prixunit>30</prixunit>
                <quantite>1</quantite>
                <prixtotal>30</prixtotal>
            </produit>
        </client>
        <client>
            <nom>Société B</nom>
            <adresse>21 allée des bras casssés
            </adresse>
            <ville>Bricol Ville</ville>
            <produit>
                <nom>Carte Mère Abit</nom>
                <code>CMABITKT266</code>
                <prixunit>50</prixunit>
                <quantite>1</quantite>
                <prixtotal>50</prixtotal>
            </produit>
            <produit>
                <nom>Dvd Pioneer</nom>
                <code>Dvd103S</code>
                <prixunit>40</prixunit>
                <quantite>2</quantite>
                <prixtotal>80</prixtotal>
            </produit>
            <produit>
                <nom>Souris Logitech</nom>
                <code>SoLogiOpt</code>
                <prixunit>20</prixunit>
                <quantite>5</quantite>
                <prixtotal>100</prixtotal>
            </produit>
        </client>
    </commande>
    le résultat obtenu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Boitier Morex
    Carte mère Asus
    Processeur XP 2600+
    Carte Mère Abit
    Dvd Pioneer
    Souris Logitech
    le résultat que j'aimerais avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Boitier Morex
    Carte Mère Abit
    Carte mère Asus
    Dvd Pioneer
    Processeur XP 2600+
    Souris Logitech
    merci d'avance

  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 843
    Points
    4 843
    Par défaut
    As-tu compris pourquoi ton résultat était celui-là ?

    Dans ce que tu fais actuellement, pour chaque client tu tries ses produits par ordre alphabétique.
    Or toi ce que tu veux c'est trier tous les produits (quelque soit le client) par ordre alphabétique.

    Pour se faire, il ne faut pas faire le traitement dans une template qui sélectionne l'élément client.

    Ceci devrait donc faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        <xsl:template match="commande">
            <xsl:for-each select="client/produit">
                <xsl:sort select="nom" />
                <xsl:value-of select="nom"/> <br/>
            </xsl:for-each>
     
         </xsl:template>

  3. #3
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut
    Citation Envoyé par Loceka Voir le message
    As-tu compris pourquoi ton résultat était celui-là ?

    Dans ce que tu fais actuellement, pour chaque client tu tries ses produits par ordre alphabétique.
    Or toi ce que tu veux c'est trier tous les produits (quelque soit le client) par ordre alphabétique.

    Pour se faire, il ne faut pas faire le traitement dans une template qui sélectionne l'élément client.

    Ceci devrait donc faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        <xsl:template match="commande">
            <xsl:for-each select="client/produit">
                <xsl:sort select="nom" />
                <xsl:value-of select="nom"/> <br/>
            </xsl:for-each>
     
         </xsl:template>
    merci infiniment, çà marche trés bien.

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

Discussions similaires

  1. [XSLT] tri par date avec xsl:sort
    Par Tanebisse dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 15/04/2010, 16h06
  2. Tri complexe avec xsl:sort
    Par jesemeatoutvent dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 17/01/2009, 21h53
  3. Réponses: 2
    Dernier message: 27/09/2007, 14h04
  4. probleme de tri avec xsl:sort
    Par d4v1d dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2007, 15h35
  5. [XSL] Arbres intermédiaires avec xsl:sort ?
    Par Blustuff dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/07/2005, 10h09

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