Использование <= и> = в XSLT - PullRequest
       14

Использование <= и> = в XSLT

3 голосов
/ 30 ноября 2010

Я хотел бы использовать <= и >= при сравнении значений в <xsl:if test="">.Как это сделать?

Обновление:

<?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

Ответы [ 2 ]

4 голосов
/ 30 ноября 2010

Вы можете экранировать от < и > до &lt; и &gt; соответственно.

См. Пример для xsl:if в w3schools .


Обновление:

Увидев ваше состояние, я не удивляюсь, что оно не работает.

Вместо:

1 &lt;= . &lt; 2

Попробуйте:

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

Вы не можете связать < и > в XSLT.

2 голосов
/ 30 ноября 2010

В дополнение к правильному ответу @ Одеда :

0,1. Нет никакой необходимости экранировать оператор > в XSLT. Просто напишите: >

0,2. Можно избежать экранирования оператора < .

Вместо:

  x &lt; y

Вы можете написать:

not(x >= y)

Вместо:

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

Вы можете написать:

2 > . and not(1 > .)

0,3. В XPath 1.0 операторы < и > не определены для строк (только для чисел).

Наконец , на самом деле это вопрос XPath 1.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...