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 :

Transformer un nombre négatif en nombre positif [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2018
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Transformer un nombre négatif en nombre positif
    Bonjour
    Je souhaiterais savoir comment faire pour transformer une valeur négative en valeur positive.
    Exemple, si la valeur est -23 alors je dois renseigner 23.
    J'ai essayé avec <xsl:when test="$vvte < 0"> et si cela répond à la condition alors je multiplie par -1 mais ca ne fonctionne pas.
    Pourriez-vous m'aider?

    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
     
    <cart_rules>
    <xsl:for-each select="str:tokenize(voucher_name, '#')">
    		<xsl:variable name="pos" select="position()"/>
    		<cart_rule>
    		     <name><xsl:value-of select="normalize-space(.)"/></name>
    			<value_tax_excl>
    			<xsl:choose>
    				<xsl:when test="$vvte < 0">
    				<xsl:value-of select="normalize-space(str:tokenize($vvte * -1, '#')[position()=$pos])"/>
    				</xsl:when>
    				<xsl:otherwise>
    				<xsl:value-of select="normalize-space(str:tokenize($vvte, '#')[position()=$pos])"/>
    				</xsl:otherwise>
    			</xsl:choose>
    			</value_tax_excl>
    			<value><xsl:value-of select="normalize-space(str:tokenize($vv, '#')[position()=$pos])"/></value>
    		</cart_rule>

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Le caractère "<" est obligatoirement échappé là (par contre le caractère ">" est acceptable comme tel; mais pour mémoriser moins on l'échappe souvent aussi, c'est comme on veut).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                                    <!--
    				<xsl:when test="$vvte < 0">
                                    -->
    				<xsl:when test="$vvte &lt; 0">

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2018
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Ca fonctionne sauf pour remettre en positif
    Merci beaucoup pour votre retour.. Je n'ai plus d'erreur, lorsque j'échappe, sur la génération de l'export par contre, j'ai un résultat NaN lorsque la variable $vvte est négative.
    Si $vvte est positif, cela fonctionne bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <value_tax_excl>NaN</value_tax_excl>

    Citation Envoyé par tsuji Voir le message
    Le caractère "<" est obligatoirement échappé là (par contre le caractère ">" est acceptable comme tel; mais pour mémoriser moins on l'échappe souvent aussi, c'est comme on veut).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                                    <!--
    				<xsl:when test="$vvte < 0">
                                    -->
    				<xsl:when test="$vvte &lt; 0">

  4. #4
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Si $vvte est positif, cela fonctionne bien.
    Cela implique des choses et je vois ce que vous entendez vraiment à faire.

    On fait comme ça pour le bloc entier (je mets number() juste pour s'assurer un peu plus).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:variable name="vvteEntry" select="number(normalize-space(str:tokenize($vvte, '#')[position()=$pos]))" />
    <xsl:choose>
        <xsl:when test="$vvteEntry &lt; 0">
            <xsl:value-of select="$vvteEntry*-1"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$vvteEntry"/>
        </xsl:otherwise>
    </xsl:choose>
    En xslt v2, il y a une fonction abs(), mais, je suppose on est en xslt v1 comme annoncé.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2018
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Résolu
    Bonjour Tsuji,
    Merci pour votre réponse.
    J'ai réussi à me débrouiller autrement mais je vais également tester votre solution.
    J'ai utilisé translate pour remplacer le - par rien et ça fonctionne.
    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
     
     <xsl:variable name="vv" select="voucher_value"/>
     <xsl:variable name="vvte" select="voucher_value_tax_excl"/>
    <xsl:variable name="minus" select="'-'" />
    <xsl:variable name="vide" select="''" />
    <cart_rules>
    		<xsl:for-each select="str:tokenize(voucher_name, '#')">
    		<xsl:variable name="pos" select="position()"/>
    		<cart_rule>
    		        <name><xsl:value-of select="normalize-space(.)"/></name>
    			<value_tax_excl><xsl:value-of select="normalize-space(str:tokenize(translate($vvte,$minus,$vide), '#')[position()=$pos])"/></value_tax_excl>
    			<value><xsl:value-of select="normalize-space(str:tokenize(translate($vv,$minus,$vide), '#')[position()=$pos])"/></value>
    		</cart_rule>
    		</xsl:for-each>
    	 </cart_rules>
          </xsl:for-each>

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

Discussions similaires

  1. Transformer un nombre positif en négatif
    Par Fynezy dans le forum DB2
    Réponses: 5
    Dernier message: 14/01/2019, 17h32
  2. [AC-2007] Nombre positif ou négatif en fonction d'un contrôle
    Par 69.zebulon dans le forum IHM
    Réponses: 4
    Dernier message: 12/07/2016, 21h00
  3. [Free Pascal] Produit de trois nombres positifs ou négatifs
    Par nadirmabed dans le forum Free Pascal
    Réponses: 17
    Dernier message: 18/01/2015, 08h38
  4. [Turbo Pascal] Tri de nombres positifs et négatifs
    Par khmamed dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 06/03/2011, 17h40
  5. [Affichage] nombres +positifs/-négatifs
    Par Commodore dans le forum Excel
    Réponses: 2
    Dernier message: 18/01/2008, 16h21

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