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 :

opération en XSL


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 13
    Points : 11
    Points
    11
    Par défaut opération en XSL
    Bonjour,

    Je débute totalement en XML / XSL et je rencontre beaucoup de problème en ce qui concerne la mise en forme d'une facture (doc XML).

    Les deux documents dont je me sert sont ici :
    facture.xml
    facture.xsl
    et optionnel : style.css

    Et le but est d'obtenir le même affichage que celui que vous voyez en supprimant les balises <Prix>...</Prix> du document XML ...
    C'est à dire qu'il faut créer des variables dans le XSl qui vont jouer leur rôle .. mais je vois pas trop comment faire ...

    Merci !
    ==> Mais ou sont les missiles ?

  2. #2
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 39
    Points : 46
    Points
    46
    Par défaut
    De mon experience personnel, il est impossible d'effectuer des multiplications, divisions etc.. dans une feuille xsl (je me trompe peut être mais en tout cas je n'ai jamais vu ni entendu parler de cette possibilité). Par contre ce que tu peux faire, c'est insérer dans ton xsl une petite fonction javascript genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function prix(prixlot, nblot, divname){
         divname.innerHTML = prixlot * nblot;
    }
    L'utilisation de innerHTML avec le div ne marche que sous IE6, mais tu dois pouvoir trouver une autre feinte si tu travailles avec une version plus vieille d'IE. En tout cas l'idée est là: génère du javascript à partir de ta xsl et arrange toi de manière à ce qu'il soit appelé une fois que ta page est générée (sur une action onload ou autre). Voila une idée, à toi de jouer maintenant. Bon courage

  3. #3
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    solution :
    <xsl:value-of select="number(PrixLot) * number(NbLot)"/>

    ...mais on dirait que tu as déjà trouvé par toi même
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Tout d'abord merci d'avoir répondu si vite, c'est sympas de votre part.

    Ensuite en ce qui concerne mon problème, il ne réside pas dans la multiplication des deux valeurs (Prilot et NbLot), car comme tu l'as remarqué Gregory, j'avais effectivement trouvé la solution ...

    Mais le problème se situe apres, pour effectuer et afficher le Total HT.

    En fait les fichiers que je vous ai envoyé fonctionnent parfaitement, il s'agit du résultat que j'aimerai obtenir. Par contre, ce que je ne parviens pas à trouver c'est comment obtenir le ToTal HT, en supprimer les balises <Prix> et </Prix>.

    J'ai vu quelques trucs sur le net, il semblerait qu'il faudrait le faire en récursif ... Vous z'auriez pas une ptite idée ?
    ==> Mais ou sont les missiles ?

  5. #5
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    effectivement l'affectation de nouvelles valeurs à une variable xsl n'est pas possible donc comment calculer un total au fur et à mesure de la progression dans le document xml? tu n'as pas le choix, il faut utiliser l'approche récursive:

    définit d'abord un template par appel direct :

    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
     <xsl:template name="traiter_lot">
        <xsl:param name="total"/>
        <xsl:param name="position"/>
            <xsl:choose>
            <xsl:when test="$position <= count(//Lot)">
             <xsl:variable name="prixl"><xsl:value-of select="//Lot[position()=$position]/PrixLot"/></xsl:variable> 
             <xsl:variable name="nbl"><xsl:value-of select="//Lot[position()=$position]/NbLot"/></xsl:variable>
     
     .... affichage d'un sous-total article ....
     
                <xsl:call-template name="traiter_lot">
                    <xsl:with-param name="total"><xsl:value-of select="$total+$prixl * $nbl"/></xsl:with-param>
                    <xsl:with-param name="position"><xsl:value-of select="$position+1"/></xsl:with-param>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
     
    ... affichage total...
            </xsl:otherwise>
    et ne pas oublier d'appeler le template! (qui remplace le for-each)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                <xsl:call-template name="traiter_lot">
                    <xsl:with-param name="total">0</xsl:with-param>
                    <xsl:with-param name="position">1</xsl:with-param>
                </xsl:call-template>
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  6. #6
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 39
    Points : 46
    Points
    46
    Par défaut
    Excuse moi, je n'avais pas bien compris ta question... Bon et bien j'ai fait des progrés en XSL, je sais maintenat faire des opérations sur les nombres, c'est cool. Sinon, si tu veux écrire une fonction recursive, il te faut écrire un template avec passage de paramètres. Plutôt qu'un long discours, un bon exemple. Tu trouveras l'idée à l'adresse suivante:

    http://xmlfr.org/listes/xml-tech/2002/10/0175.html

    (C'est d'ailleurs un de mes anciens profs qui a posté la réponse, le monde est petit...). En espérant que j'ai repondu à tes attentes cette fois. De mon côté, je vais essayer de modifier ton xsl si j'ai le temps. Bon courage....

  7. #7
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 39
    Points : 46
    Points
    46
    Par défaut
    Bon et bien Gregory fut plus rapide que moi de 15 minutes..... Et plus precis aussi.... Il y a des fois où il faut savoir perdre....

  8. #8
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    ce n'est que partie remise
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 13
    Points : 11
    Points
    11
    Par défaut grrrr
    Gregory m'a donné le code, mais je n'arrive pas, a l'integrer correctement à ma feuille de style.

    J'ai des erreurs avec
    <xsl:when test="$position <= count(//Lot)">
    il n'accepte pas le signe "<" ...

    Et même avec quelques corrections j'arrive juste à afficher le texte : ... affichage total... qui provient de :
    <xsl:otherwise>
    ... affichage total...
    </xsl:otherwise>
    C'est grave docteur ?
    ==> Mais ou sont les missiles ?

  10. #10
    Membre confirmé
    Avatar de grishka
    Inscrit en
    Janvier 2003
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 285
    Points : 499
    Points
    499
    Par défaut
    oups remplace < par & lt; (tout collé) et ca devrait marcher.
    "Les gens normaux croient que si ca marche, c'est qu'il n'y a rien à reparer. Les ingénieurs croient que si ca marche, c'est que ca ne fait pas encore assez de choses."
    --Scott Adams

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Bon ben c'est bon, tout marche, c'est nickel ...

    Merci pour votre aide, et votre rapidité aussi, j'ai vraiment beaucoup appris ... Ca fait vraiment plaisir de voir un forum actif !!

    allez @ + et bonne route messieurs !
    ==> Mais ou sont les missiles ?

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

Discussions similaires

  1. alterner les couleurs dans un tableau avec xsl
    Par Eithelgul dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2015, 23h29
  2. [XSL] Opération sur des valeurs XML grâce à Javascript
    Par kimar dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 26/06/2007, 12h57
  3. xml -> xsl -> xml
    Par virgile04 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/10/2002, 16h53
  4. [XSLT] inclure du XSL dans une balise html
    Par iaa dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/08/2002, 15h57
  5. Cours en Français sur XML-XSL et XPath
    Par Community Management dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 25/04/2002, 15h46

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