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 :

Sortir l'article le plus commandé parmis une liste d'article [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut Sortir l'article le plus commandé parmis une liste d'article
    Bonjour,

    Je vous explique mon problème, j'ai une liste d'acheteurs avec leurs commandes et les articles associés. Je souhaite, grâce à XSLT, sortir l'article le plus acheté et uniquement celui la.

    J'ai essayé diverses solutions et j'arrive à un résultat qui ne me satisfait pas totalement. Je ressors la liste des articles, avec le nombre d'occurence et je les tri.

    voila ce que de quoi je pars :

    le 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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    <?xml version="1.0"?> 
    <?xml-stylesheet type="text/xsl" href="commandes.xsl"?>
    <users> 
      <user>
        <prenom>Alain</prenom>
        <nom>Souchon</nom>
        <email>alain.souchon@gmail.com</email>
        <commandes>
          <commande>
            <date>06/24/2013 09:34:21</date>
            <montant>16.45</montant>
            <articles>
              <article>
                <id>12</id>
                <nom>velo</nom>
                <url>http://www.velo-cycle-vtt.com/images/velo-kx-30.jpg</url>
                <prix>8.30</prix>
              </article>
              <article>
                <id>37</id>
                <nom>bateau</nom>
                <url>http://www.locationbateaunice.com/bateau-a-moteur-nice.jpg</url>
                <prix>8.15</prix>
              </article>
            </articles>
          </commande>
          <commande>
            <date>06/24/2013 09:34:21</date>
            <montant>16.45</montant>
            <articles>
              <article>
                <id>37</id>
                <nom>bateau</nom>
                <url>http://www.locationbateaunice.com/bateau-a-moteur-nice.jpg</url>
                <prix>8.15</prix>
              </article>
            </articles>
          </commande>
          <commande>
            <date>06/24/2013 09:34:21</date>
            <montant>16.45</montant>
            <articles>
              <article>
                <id>37</id>
                <nom>bateau</nom>
                <url>http://www.locationbateaunice.com/bateau-a-moteur-nice.jpg</url>
                <prix>8.15</prix>
              </article>
            </articles>
          </commande>
        </commandes>
      </user>
      <user>
        <prenom>Oscar</prenom>
        <nom>Batare</nom>
        <email>multikill@laposte.net</email>
        <commandes>
          <commande>
            <date>08/02/2013 19:14:21</date>
            <montant>166</montant>
            <articles>
              <article>
                <id>42</id>
                <nom>timbre femen</nom>
                <url>http://www.nationalite-citoyennete-identite.com/wp-content/uploads/2013/07/timbre-marianne-femen3.jpg</url>
                <prix>166</prix>
              </article>
            </articles>
          </commande>
          <commande>
            <date>08/03/2013 11:37:21</date>
            <montant>53</montant>
            <articles>
              <article>
                <id>8</id>
                <nom>timbre toutou</nom>
                <prix>53</prix>
                <url>http://timbres.laposte.fr/bpmapp-upload/download/fstore/timbre%20chiot.jpg</url>
              </article>
            </articles>
          </commande>
          <commande>
            <date>01/01/2014 12:01:21</date>
            <montant>170</montant>
            <articles>
              <article>
                <id>42</id>
                <nom>timbre femen</nom>
                <url>http://www.nationalite-citoyennete-identite.com/wp-content/uploads/2013/07/timbre-marianne-femen3.jpg</url>
                <prix>166</prix>
              </article>
              <article>
                <id>22</id>
                <nom>Pot</nom>
                <url>https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQz4APiMYah_Kiwy43kczWtbwmPNISEuQlw34EuDId0CUy5AK75Lphno9jP</url>
                <prix>4</prix>
              </article>
            </articles>
          </commande>
        </commandes>
      </user>
    </users>
    Le XSLT :

    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
     
    <?xml version='1.0' encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:key name="article-by-id" match="/users/user/commandes/commande/articles/article" use="id" />
      <xsl:template match="/"> 
        <html>
          <head>
            <title>TEST XSL</title>
          </head>
          <body>
     
            <table border="1" cellspacing="0" cellpadding="3">
              <tr bgcolor="#FFFF00"> 
                <td>id Article </td>
                <td>nb fois commandé</td>
              </tr>
              <xsl:for-each select="/users/user/commandes/commande/articles/article[generate-id() = generate-id(key('article-by-id',id)[1])]" >
                <xsl:sort select="count(key('article-by-id',current()/id))" data-type="number" order="descending" />
                <tr>
                  <td>
                    <xsl:value-of select="id"/>
                  </td>
                  <td>
                    <xsl:value-of select="count(key('article-by-id',current()/id))"/>
                  </td>
                </tr> 
              </xsl:for-each>
            </table>
          </body>
        </html>
      </xsl:template> 
    </xsl:stylesheet>
    Y a t'il possibilité de ne cibler que celui qui a été le plus commandé ?


    D'avance merci pour votre aide.

    Olivier

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Ma foi, il y a toujours <xsl:if test="position() = 1">.

    Pas très optimisé, mais infiniment plus simple qu'un template récursif.

  3. #3
    Membre averti

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Points : 364
    Points
    364
    Par défaut
    Salut,

    Effectivement c'est hyper simple, j'étais parti sur quelquechose de beaucoup plus compliqué.

    Merci !

    Olivier

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 05/05/2015, 16h26
  2. Réponses: 19
    Dernier message: 10/01/2007, 22h45
  3. Réponses: 10
    Dernier message: 15/12/2006, 07h34
  4. [XSLT]Recuperer une valeur parmis une liste. (tri)
    Par Asaturne dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 16/06/2006, 17h27
  5. Choisir un chiffre aléatoire parmi une liste
    Par djsbens dans le forum Général Java
    Réponses: 2
    Dernier message: 08/03/2006, 18h19

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