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:if comparaison de valeur [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Par défaut xsl:if comparaison de valeur
    Bonjour,
    Je ne parviens pas à faire un test "plus grand que" ou "plus petit que" dans une balise <xsl:if ...>.

    J'ai essayé :

    - <xsl:if test="netamount &gt; 0">
    - <xsl:if test="netamount gt 0">
    - <xsl:if test="netamount > 0">

    rien de marche, alors que, par exemple, l'instruction suivante fonctionne :

    - <xsl:if test="netamount = 0">

    Quelqu'un peut-il m'aider ?
    Merci.

  2. #2
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    les 2 extraits suivant devraient fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    - <xsl:if test="netamount &gt; 0">
    - <xsl:if test="netamount > 0">
    Après, il faudrait que l'on en sache plus pour t'aider...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Par défaut
    Merci pour cette réponse.
    Malheureusement, aucun des deux test ne fonctionne : ils sont simplement ignorés (c'est à dire que le code qui suit ce(s) test(s) est exécuté malgré le fait qu'une des 2 conditions -- la seconde -- ne soit pas respectée) :

    Voici le test, en entier, tel qu'il apparait dans mon fichier xsl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="(advance/paymentmode = 'VIR') and (advance/netamount > 0)">
            <fo:page-sequence master-reference="simple">
            ...
    Voici un aperçu du fichier xml généré à la volée (java) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <advance>
    	<advanceid>7841</advanceid>	
    	<piecenumber>1142</piecenumber>
    	<paymentmode>VIR</paymentmode>
    	<netamount>-100</netamount>
    </advance>
    Je précise que le test : (advance/paymentmode = 'VIR') fonctionne parfaitement.
    Par ailleurs, j'ai essayé en mettant des guillemets (simples ou doubles) dans le 2 fichiers et rien à faire.
    Merci pour ton aide.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Par défaut
    N'aurais tu pas simplement oublié un "$" devant tes noms de variables?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        <xsl:if test="$netamount &gt; 0">
        <xsl:if test="$netamount > 0">
    sinon, si ta valeur est contenue dans une chaine de caractères, ça peut être une bonne idée de la "caster" en nombre avec

    number($netamount)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        <xsl:if test="number($netamount) &gt; 0">
        <xsl:if test="number($netamount) > 0">

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Par défaut
    Si j'essaie d'utiliser j'obtiens une erreur à l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.apache.xml.utils.WrappedRuntimeException: Impossible de trouver la variable portant le nom netamount
    Et encore une fois, le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xsl:if test="advance/paymentmode = 'VIR'"
    fonctionne, alors je ne pense pas que le problème vienne du nom de la variable...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 71
    Par défaut
    Effectivement, j'avais mal regardé ton XML, ce n'était pas une variable.

    Peux-tu essayer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:if test="(advance/paymentmode = 'VIR') and (number(advance/netamount) &gt; 0)">
            <fo:page-sequence master-reference="simple">
            ...
    ou encore:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:if test="(advance/paymentmode = 'VIR') and (number(advance/netamount/.) &gt; 0)">
            <fo:page-sequence master-reference="simple">
            ...
    si ça ne marche toujours pas, essaie de remplacer les &gt; par des >

  7. #7
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Citation Envoyé par liouan Voir le message
    si ça ne marche toujours pas, essaie de remplacer les &gt; par des >

    Si ça ne marche pas le problème n'est pas là.

    et (number(advance/netamount/.) pas utile non plus c'est la même chose que le précédent.

    Si un problème persiste il est dans la génération du XML, par exemple

    des espace avec le nombre ou balise vide (les deux seront retraduit en chaine)

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Erwy Voir le message
    Si un problème persiste il est dans la génération du XML, par exemple

    des espace avec le nombre ou balise vide (les deux seront retraduit en chaine)
    Voilà.

    Pour l'instant nous n'avons eus que des aperçus du XML. À mon humble avis, cet aperçu a sûrement été mal fait. C'était bien d'essayer de raccourcir le truc, mais ça ne va plus suffire pour étudier le problème.
    Il va nous falloir le vrai XML tel qu'il est généré, sans aucune modification, et pour lequel cette condition ne marche pas. De préférence, il faudrait en générer un qui soit assez court.

    Parce que bon, tout le monde a bien vu que si on a vraiment ce XML-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <advance>
      <advanceid>7841</advanceid>	
      <piecenumber>1142</piecenumber>
      <paymentmode>VIR</paymentmode>
      <netamount>-100</netamount>
    </advance>
    Eh ben la condition fonctionne parfaitement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Par défaut
    Bonjour,
    Merci à tous pour vos messages...
    Voici le XML, tel que généré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <advance><advanceid>7843</advanceid><contractid></contractid><piecenumber>1144</piecenumber><contributorname>Mme Prénom NOM</contributorname><addresspart1>Adresse</addresspart1><addresspart2></addresspart2><city>75006 Paris</city><country></country><functionname>Auteur</functionname><contributorid>12189</contributorid><paymentdate>27/01/2011</paymentdate><paymentobject>Règlement</paymentobject><worktitle></worktitle><condition></condition><paymentmode>VIR</paymentmode><lines><line><linetitle>AGESSA auteur (0,85% du montant brut)</linetitle><lineamount>0,85</lineamount><linesign>+</linesign></line><line><linetitle>C.S.G. non imposable (5,10% de 97,00% du montant brut)</linetitle><lineamount>4,95</lineamount><linesign>+</linesign></line><line><linetitle>C.S.G. imposable (2,40% de 97,00% du montant brut)</linetitle><lineamount>2,33</lineamount><linesign>+</linesign></line><line><linetitle>R.D.S. imposable (0,50% de 97,00% du montant brut)</linetitle><lineamount>0,49</lineamount><linesign>+</linesign></line><line><linetitle>TVA collectée (4,70% du montant brut)</linetitle><lineamount>4,70</lineamount><linesign>+</linesign></line><line><linetitle>TVA déductible (5,50% du montant brut)</linetitle><lineamount>5,50</lineamount><linesign>-</linesign></line></lines><brutamount>100,00</brutamount><brutsign>-</brutsign><nettitle>Montant net à payer</nettitle><netsign>-</netsign><netamount>92,18</netamount><netsignedamount>-100</netsignedamount><amountSt1>quatre-vingt douze euros et dix-huit</amountSt1><amountSt2>centimes</amountSt2><bankcode>BAN</bankcode><bankname>BANQUE</bankname><bankaddresspart1>Adresse banque</bankaddresspart1><bankaddresspart2></bankaddresspart2><bankcity>75006 Paris</bankcity><bankfax></bankfax><bankbank></bankbank><bankcounter></bankcounter><bankaccount></bankaccount><bankkey></bankkey><bankiban1></bankiban1><bankiban2></bankiban2><bankiban3></bankiban3><bankiban4></bankiban4><bankiban5></bankiban5><bankiban6></bankiban6><bankiban7></bankiban7><bankbic></bankbic><domiciliation>CIC - </domiciliation><contributorbank></contributorbank><contributorcounter></contributorcounter><contributoraccount></contributoraccount><contributorkey></contributorkey><contributoriban1></contributoriban1><contributoriban2></contributoriban2><contributoriban3></contributoriban3><contributoriban4></contributoriban4><contributoriban5></contributoriban5><contributoriban6></contributoriban6><contributoriban7></contributoriban7><contributorbic></contributorbic><contributorrouting></contributorrouting><contributorcountryid>62</contributorcountryid><username>JG</username></advance>
    Encore merci.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 199
    Par défaut
    Bonjour,
    Mon problème est apparemment résolu (sans que je ne comprenne vraiment pourquoi) ; il semblerait qu'une erreur de syntaxe dans un autre fichier xsl, pourtant pas utilisé dans la génération du présent pdf, soit en cause.
    J'ai corrigé cette erreur et maintenant le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="(advance/paymentmode = 'VIR') and (advance/netsignedamount &gt; 0)">
    fonctionne.
    Pour info, cela fonctionne également avec la fonction "number".
    Je vous remercie tous pour votre implication.

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

Discussions similaires

  1. [XSL] Comment modifier la valeur d'une variable?
    Par sorcer1 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/02/2010, 13h26
  2. [XSL] récupération d'une valeur
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/12/2005, 15h58
  3. [xsl-fo] Recuperation de valeurs dans une boucle
    Par serwol dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 12/12/2005, 12h13
  4. [XSL - XMLDOM] Attibuer une valeur à xsl:param
    Par Trin dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/11/2005, 14h52
  5. [XSL] Tester si la valeur est un entier dans un xml
    Par MrMaze dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/07/2003, 04h35

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