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 :

[XSL] Fonction sum recursive?


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut [XSL] Fonction sum recursive?
    Bonjour,

    J'ai besoin de vos lumières car je suis completement perdu

    J'ai besoin de calculer le montant total par article puis faire la somme de ces derniers...

    En gros :

    Poireau : PrixBase * Quantite =5
    Carotte : PrixBase * Quantite =10
    Patate : PrixBase * Quantite = 7

    Total commande = 22

    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
     
    <Produits>
      <Composant Id="c75FbD223436">                                                
        <Libelle>Poireau</Libelle>
        <PrixBase>1</PrixBase>
        <Quantite>5</Quantite>
        <Composants />
       </Composant>
       <Composant Id="c75FbD45636">                                                 
         <Libelle>Poireau</Libelle>
         <PrixBase>2</PrixBase>
         <Quantite>5</Quantite>
         <Composants />
        </Composant>
       <Composant Id="c75F874436">                                           
         <Libelle>Poireau</Libelle>
         <PrixBase>7</PrixBase>
         <Quantite>1</Quantite>
         <Composants />
        </Composant>
    </produits>

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Une instruction for-each doit faire l'affaire pour la première partie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <xsl:for-each select="//Composant">
            <xsl:value-of select="Libelle" />
            <xsl:value-of select="PrixBase * Quantite" />
     </xsl:for-each>
    puis pour le total général il faut je pense passer par une fonction récursive (exemple dans la FAQ):
    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
     
     
    <xsl:template name="tpl_total">
       <xsl:param name="liste"/>
       <xsl:choose>
          <xsl:when test="$liste">
             <xsl:variable name="prem" select="$liste[1]"/>
             <xsl:variable name="reste">
                <xsl:call-template name="tpl_total">
                   <xsl:with-param name="liste" select="$liste[position()!=1]"/>
                </xsl:call-template>
             </xsl:variable>
             <xsl:value-of select="$prem/PrixBase * $prem/Quantite + $reste"/>
          </xsl:when>
          <xsl:otherwise>0</xsl:otherwise>
       </xsl:choose>
    </xsl:template>
     
       <xsl:variable name="total">
            <xsl:call-template name="tpl_total">
                <xsl:with-param name="liste" select="//Composant"/>
            </xsl:call-template>
       </xsl:variable>
    Total commande = <xsl:value-of select="format-number($total,'#.00')"/>
    ERE
    Quand une tête pense seule, elle devient folle.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    Salut,

    Une instruction for-each doit faire l'affaire pour la première partie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <xsl:for-each select="//Composant">
            <xsl:value-of select="Libelle" />
            <xsl:value-of select="PrixBase * Quantite" />
     </xsl:for-each>
    puis pour le total général il faut je pense passer par une fonction récursive (exemple dans la FAQ):
    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
     
     
    <xsl:template name="tpl_total">
       <xsl:param name="liste"/>
       <xsl:choose>
          <xsl:when test="$liste">
             <xsl:variable name="prem" select="$liste[1]"/>
             <xsl:variable name="reste">
                <xsl:call-template name="tpl_total">
                   <xsl:with-param name="liste" select="$liste[position()!=1]"/>
                </xsl:call-template>
             </xsl:variable>
             <xsl:value-of select="$prem/PrixBase * $prem/Quantite + $reste"/>
          </xsl:when>
          <xsl:otherwise>0</xsl:otherwise>
       </xsl:choose>
    </xsl:template>
     
       <xsl:variable name="total">
            <xsl:call-template name="tpl_total">
                <xsl:with-param name="liste" select="//Composant"/>
            </xsl:call-template>
       </xsl:variable>
    Total commande = <xsl:value-of select="format-number($total,'#.00')"/>
    ERE
    Merci pour ta réponse

    Effectivement je suis passé par une fonction récursive comme indiquée dans la FAQ et ca fonctionne niquel

    Merci de prendre le temps de répondre aux noobs en dev

  4. #4
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Est ce possible d'avoir un zip avec le code pour que cela puisse servir à d'autres ?

    Merci,

    ERE
    Quand une tête pense seule, elle devient folle.

Discussions similaires

  1. [MySQL] Afficher le résultat de la fonction SUM()
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/12/2005, 01h15
  2. Fonction SUM de QReport
    Par sondo dans le forum Composants VCL
    Réponses: 6
    Dernier message: 14/12/2004, 12h31
  3. pb avec la fonction sum!
    Par ber_jp dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 28/08/2004, 22h22
  4. Fonction 'SUM'
    Par X-Deus dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/06/2003, 08h22
  5. [VBA-E] Fonction sum() dans une cellule
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/12/2002, 10h18

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