2010-11-30 33 views
3

Je voudrais utiliser <= et >= lors de la comparaison des valeurs dans <xsl:if test="">. Comment faire ça?En utilisant <= and > = dans XSLT

Mise à jour:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 

<html> 
    <body> 
     <h1>Average classsize per user and module</h1> 
     <table border="1"> 

      <tr> 
       <th>User Email</th> 
       <th>Module Code</th> 
       <th>Average Value</th> 
      </tr> 
      <xsl:apply-templates select="//classsize" /> 
     </table> 
    </body> 
</html> 

</xsl:template> 

<xsl:template match="average"> 
    <xsl:choose> 
     <xsl:when test=". &lt; 1"> 
      <td style="background-color: red;"><xsl:value-of select="." /></td> 
     </xsl:when> 

     <xsl:when test="1 &lt;= . &lt; 2"> 
      <td style="background-color: blue;"><xsl:value-of select="." /></td> 
     </xsl:when> 

     <xsl:when test="2 &lt;= . &lt; 3"> 
      <td style="background-color: yellow;"><xsl:value-of select="." /></td> 
     </xsl:when> 

     <xsl:otherwise> 
      <td style="background-color: white;"><xsl:value-of select="." /></td> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

<xsl:template match="//classsize"> 
    <tr> 
     <td><xsl:value-of select="email" /></td> 
     <td><xsl:value-of select="modulecode" /></td> 
     <xsl:apply-templates select="average" /> 
    </tr> 
</xsl:template> 

</xsl:stylesheet> 

average < 1 - in red 
1 <= average < 2 - in blue 
2 <= average < 3 - in yellow 
average >= 3 - white 
+0

Bonne question, +1. Voir ma réponse pour des exemples de comment vous pouvez écrire des comparaisons sans avoir du tout pour échapper à '<'. :) –

Répondre

2

En addidtion à @ réponse de Oded:

.1. Il n'est jamais nécessaire d'échapper l'opérateur > dans XSLT. Il suffit d'écrire: >

.2. On peut éviter d'échapper à l'opérateur <.

Au lieu de:

x &lt; y 

vous pouvez écrire:

not(x >= y) 

Au lieu de:

1 &lt;= . and . &lt; 2 

vous pouvez écrire:

2 > . and not(1 > .) 

.3. Dans XPath 1.0, les opérateurs < et > ne sont pas définis sur les chaînes (uniquement sur les nombres).

Enfin, il s'agit en fait d'une question XPath 1.0.

+0

ok monsieur, je vais garder t chapeau en tête. Je vous remercie. – Moshin

+0

@Moshin: Vous êtes les bienvenus. –

+2

+1 Bonne réponse. Aussi, au lieu de 'x < y' vous pouvez l'écrire comme' y> x'. –

4

Vous pouvez échapper à la < et >-&lt; et &gt;, respectivement.

Voir l'exemple pour xsl:if sur w3schools.


Mise à jour:

Après avoir vu état, je ne suis pas surpris que cela ne fonctionne pas.

Au lieu de:

1 &lt;= . &lt; 2 

Essayez:

1 &lt;= . and . &lt; 2 

Vous chaîne ne peut pas le < et > comme ça dans XSLT.

+0