2010-04-20 16 views
2

Je dois écrire une condition simple XSL:xsl littérale avec <xsl:if>

IF column=0 AND IF result = .35 
    set background color to green and write $result 
ELSE IF result = 0.10 
    set background color to white and write the word "QQQ" 

Je l'ai essayé, mais il ne fonctionne pas:

<xsl:param name="result" /> 
    <xsl:param name="column" />  

    <xsl:if test="$result = 0.35 and $column = 0"> 
     <xsl:attribute name='background-color'>#669933</xsl:attribute> 
     <xsl:value-of select="result"/>  
    </xsl:if> 

    <xsl:if test="$result = 0.10"> 
     <xsl:value-of select="QQQ"/> 
    </xsl:if> 

Toutes les suggestions?

+2

Pourriez-vous également publier un extrait du code XML? Cela peut aider. – bryanjonker

+0

Bonne question (+1). Voir ma réponse expliquant les deux problèmes dans votre code. :) –

+0

@Elena: Si vous avez des problèmes supplémentaires, vous devez afficher le code source XML (document minimal illustrant toujours le problème) et le code XSLT complet (feuilles de style minimales qui illustrent toujours le problème). Vous devez expliquer ce que la transformation est censée faire, quels sont les résultats réels et où vous pensez qu'il y a un problème. Ne nous laisse pas en mode deviner, s'il te plait. :) –

Répondre

3
<xsl:if test="$result = 0.35 and $column = 0">  
    <xsl:attribute name='background-color'>#669933</xsl:attribute> 

    <xsl:value-of select="result"/>   
</xsl:if>  

<xsl:if test="$result = 0.10">  
    <xsl:value-of select="QQQ"/>  
</xsl:if> 

Vous avez commis exactement deux erreurs dans le code ci-dessus.

Voici la version corrigée:

<xsl:if test="$result = 0.35 and $column = 0"> 
    <xsl:attribute name='background-color'>#669933</xsl:attribute> 
    <xsl:value-of select="$result"/> 
</xsl:if> 

<xsl:if test="$result = 0.10"> 
    <xsl:value-of select="'QQQ'"/> 
</xsl:if> 

Les erreurs sont:

  1. result signifie que les éléments nommés résultat qui sont des enfants du nœud de contexte. Vous voulez le <xsl:variable> nommé result. Par définition, le préfixe <xsl:variable> doit être précédé du caractère $.

  2. <xsl:value-of select="QQQ"/> Sélectionne tous les enfants du nœud actuel nommé QQQ et renvoie la valeur de chaîne du premier d'entre eux. Vous voulez que la chaîne 'QQQ' soit produite. Par définition, pour distinguer une chaîne d'un nom, la chaîne doit être entourée de guillemets ou d'apostrophes.

+0

Il semble y avoir une erreur dans votre version corrigée, il contient la chaîne "entrez le code ici". En outre, est-il besoin de 'xsl: value-of' dans ce cas? Pourquoi ne pas insérer "QQQ" comme texte littéral, éventuellement enveloppé dans 'xsl: text' pour éviter les problèmes d'espace? – markusk

+0

@markusk: C'était le code fourni à l'origine par l'OP - Je viens de corriger les erreurs. –

+0

@markusk: Il n'y a pas de problème d'espace ici. Parce que le code fourni est juste un extrait, nous ne connaissons pas le contexte dans lequel il est utilisé. Peut-être ce qui semblerait être un "problème d'espace" (non présent dans ce cas) serait quelque chose d'intentionnel dans un contexte plus large. Lorsque nous ne connaissons pas le contexte, nous ne devrions pas faire d'hypothèses sur ce qui est juste et ce qui ne va pas - laisser cela à l'OP. :) –

0

Si vous souhaitez définir la couleur d'arrière-plan d'un élément, définissez le « nom » de l'xsl: attribut « style » et la valeur « background-color: # 669933 ». Par exemple:

<div> 
    <xsl:if test="$result = 0.35 and $column = 0"> 
     <xsl:attribute name='style'>background-color:#669933</xsl:attribute> 
     <xsl:value-of select="$result"/> 
    </xsl:if> 
    <xsl:if test="$result = 0.10"> 
     <xsl:attribute name='style'>background-color:#ffffff</xsl:attribute> 
     <xsl:value-of select="'QQQ'"/> 
    </xsl:if> 
</div>