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 :

Modifier la couleur des indicateurs numériques [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 247
    Points : 277
    Points
    277
    Par défaut Modifier la couleur des indicateurs numériques
    Bonjour,

    A partir de 2 variables :
    - CA N
    - CA N-1

    Je calcule l'évolution du CA N par rapport à CA N-1 :
    - EvolCA = (CA N - CA N-1) / CA N-1

    Jusque là, pas de soucis, j'ai défini le format des nombres, et j'ai les 3 variables suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <xsl:decimal-format name = "chiffres" decimal-separator="." grouping-separator=" " minus-sign="-" digit="D" pattern-separator="!" />
     
    <xsl:variable name="CA_HT_N"  select="sum(/.../@ca_ht)"/>
    <xsl:variable name="CA_HT_N1" select="sum(/.../@ca_ht_n1)"/>
     
    <xsl:variable name="EVOL_CA_HT_N_vs_N1">
    	<xsl:choose>
    		<xsl:when test="$CA_HT_N1 != 0">
    			<xsl:value-of select="(($CA_HT_N - $CA_HT_N1) div $CA_HT_N1 * 100)"/>
    		</xsl:when>
    		<xsl:otherwise>0</xsl:otherwise>
    	</xsl:choose>
    </xsl:variable>
    Ensuite, j'affiche ces variables dans un tableau. Ce que je voudrais c'est changer la couleur de EVOL_CA_HT_N_vs_N1 selon le nombre retourné :
    - = 0 : Noir
    - > 0 : Vert
    - < 0 : Rouge

    Du coup, j'ai fait un CHOOSE avec les 3 tests. Ca fonctionne, certes, mais je ne trouve pas ça terrible car très lourd vu le nombre d'indicateurs que j'ai à afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <xsl:choose>
    	<xsl:when test="$EVOL_CA_HT_N_vs_N1 &lt; 0"> 
    		<font color="red"> <xsl:value-of select="format-number($EVOL_CA_HT_N_vs_N1, 'DD0.0', 'chiffres')"/> </font> 
    	</xsl:when>
    	<xsl:when test="$EVOL_CA_HT_N_vs_N1 = 0"> 
    		<font color="black"> <xsl:value-of select="format-number($EVOL_CA_HT_N_vs_N1, 'DD0.0', 'chiffres')"/> </font> 
    	</xsl:when>
    	<xsl:otherwise>
    		<font color="green"> <xsl:value-of select="format-number($EVOL_CA_HT_N_vs_N1, 'DD0.0', 'chiffres')"/> </font> 
    	</xsl:otherwise>
    </xsl:choose>
    Est-ce que quelqu'un aurait une solution plus simple à me proposer ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    Tu pourrais remplacer le choose par une série de if si tu trouves ça plus simple, mais sinon il y a pas grand-chose à faire pour simplifier la syntaxe d'un choix ternaire.

    Par contre si tu veux éviter de dupliquer tout ça pour chaque indicateur, tu peux utiliser un template nommé :

    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="colorResult">
      <xsl:param name="result"/>
     
      <xsl:choose>
        <xsl:when test="$result &lt; 0">red</xsl:when>
        <xsl:when test="$result &gt; 0">green</xsl:when>
        <xsl:otherwise>black</xsl:otherwise>
      </xsl:choose>
    </xsl:template>
     
    <!-- ... et pour s'en servir, ailleurs  ... -->
     
    <xsl:variable name="color">
      <xsl:call-template name="colorResult">
        <xsl:with-param name="result" select="$EVOL_CA_HT_N_vs_N1"/>
      </xsl:call-template>
    </xsl:variable>
     
    <font color="{$color}"> <xsl:value-of select="format-number($EVOL_CA_HT_N_vs_N1, 'DD0.0', 'chiffres')"/> </font>
    Tu peux aussi factoriser plus ou moins de choses, en fonction de ce que tu vas réutiliser partout ou non.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 247
    Points : 277
    Points
    277
    Par défaut
    OK merci.

    Comme je ne fais pas très souvent du XSL je pensais qu'il y aurait peut être une solution plus simple.

    Merci de ton aide en tout cas.

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

Discussions similaires

  1. [ezplot] Modifier la couleur des courbes tracées
    Par nini94 dans le forum MATLAB
    Réponses: 3
    Dernier message: 13/06/2008, 11h24
  2. Réponses: 11
    Dernier message: 21/04/2008, 09h42
  3. [plotyy] Modifier la couleur des axes
    Par fab08 dans le forum MATLAB
    Réponses: 3
    Dernier message: 08/04/2008, 14h54
  4. Modifier la couleur des liens dans balise a
    Par hellspawn_ludo dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 29/01/2008, 11h57
  5. Réponses: 6
    Dernier message: 13/01/2007, 13h33

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