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] Faire la somme d'une valeur pour un ensemble de noeuds


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut [XSLT] Faire la somme d'une valeur pour un ensemble de noeuds
    Bonjour,

    Je me demandais comment je pourrais avec une XSL, faire une somme de valeurs d'un ensemble de noeuds?

    Cad par exemple sur un XML de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <Prices>
      <Price>14</Price>
      <Price>15</Price>
      <Price>16</Price>
      <Price>17</Price>
      <Price>18</Price>
      ..
    </Prices>
    faire la somme de l'ensemble des Price, sans forcément savoir combien j'aurais d''éléments.

    Avec un xsl:for-each, ca n'a pas trop l'air compliqué car on peut partager entre chaque itération une String qui somme la valeur courante.

    Mais par exemple, pour que ca soit plus optimisé, si je veux le faire sur un apply-templates select= "//Price", je ne vois pas comment je pourrais utiliser un paramètre qui sommerait sa valeur avec le "Price courant".

    Merci :-)

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Il y a plusieurs façon de faire mais en voila une :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:template match="/">
          <result>
             <xsl:apply-templates select="//Price[1]"/>
          </result>
      </xsl:template>
     
      <xsl:template match="Price">
        <xsl:param name="curSum"/>
        <xsl:variable name="newSum">
          <xsl:choose>
            <xsl:when test="$curSum!=''"><xsl:value-of select="number($curSum)+number(text())"/></xsl:when>
            <xsl:otherwise><xsl:value-of select="text()"/></xsl:otherwise>
          </xsl:choose>
        </xsl:variable>
     
     
          <xsl:choose>
            <xsl:when test="following-sibling::Price">
              <xsl:apply-templates select="following-sibling::Price[1]">
                <xsl:with-param name="curSum" select="$newSum"/>
              </xsl:apply-templates>
            </xsl:when>
            <xsl:otherwise><xsl:value-of select="$newSum"/></xsl:otherwise>
          </xsl:choose>
     
      </xsl:template>
     
    </xsl:stylesheet>
    Peut être ça serait mieux avec des call-templates.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut Re
    Re,

    Merci :-)

  4. #4
    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
    Euh... Et ça, ça vous tente pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="sum(//Price)" />
    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

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Ah, heu, c'était pour m'exercer un peu on va dire .
    J'en ai bien besoin, je me souvenais plus de cette fonction :p.

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 188
    Points : 106
    Points
    106
    Par défaut Re
    Re,

    Ha ouais, pas mal.

    Je pensais pas qu'il pouvait faire ca directement, donc pas besoin d'apply-templates et tout un bazarre, ca se fait d'un coup :-)

    Merci :-)

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

Discussions similaires

  1. [XL-2010] Faire la somme d'une plage de valeurs d'un classeur ouvert en invisible
    Par Kutoh dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/05/2014, 15h04
  2. Faire la somme de n valeurs dans une colonne
    Par glamgeek dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/03/2009, 12h56
  3. Réponses: 3
    Dernier message: 27/10/2008, 12h05
  4. [XSLT] Récupérer une valeur pour un id donné
    Par capblans dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 23/04/2008, 09h26
  5. XI - Extraire une somme dans une periode pour faire une addition
    Par campia dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 06/12/2007, 16h41

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