Динамическое управление данными с использованием XSLT из XML - PullRequest
0 голосов
/ 07 июня 2010

Я не работаю с XSLT не слишком долго. Я прочитал, что переменная XSLT не может быть обновлена ​​на лету, так как я могу выполнить следующую задачу.

Я хочу суммировать Закупки и Продажи и поместить их в переменную, и принять решение в соответствии с этими значениями. (Например, если Покупка больше, чем продажи, сделайте что-нибудь, если нет, сделайте что-нибудь еще)

<rows>
    <row>
        <col attr2="Purchase" >100.00</col>
        <col  attr2="Sales" >100.00</col>
    </row>
    <row >
        <col attr2="Purchase" >19.16</col>
        <col  attr2="Sales" >12.94</col>
    </row>
    <row >
        <col attr2="Purchase" >0.67</col>
        <col  attr2="Sales" >2.74</col>
    </row>
    <row >
        <col attr2="Purchase" >71.95</col>
        <col  attr2="Sales" >61.54</col>
    </row>
    <row >
        <col attr2="Purchase" >3.62</col>
        <col  attr2="Sales" >14.72</col>
    </row>
    <row >
        <col attr2="Purchase">8.80</col>
        <col attr2="Sales">1.22</col>
    </row>
    <row >
        <col attr2="Purchase" >-4.28</col>
        <col  attr2="Sales" >6.53</col>
    </row>
</rows>

если кто-нибудь знает, пожалуйста, помогите мне.

Ответы [ 2 ]

1 голос
/ 07 июня 2010

Переменные XSL являются более константами: после установки их значение не может быть изменено. Единственный способ изменить переменную - это использовать рекурсивный шаблон и использовать именованный параметр для хранения текущей суммы.

Или если бы XSLT не имел функции sum!

<xsl:variable name="$purchase-total" select="sum(col[@attr2='Purchase'])" />
<xsl:variable name="$sales-total" select="sum(col[@attr2='Sales'])" />
<xsl:choose>
    <xsl:when test="$purchase-total &gt; $sales-total">
        <!-- Do something -->
    </xsl:when>
    <xsl:otherwise>
        <!-- Do something -->
    </xsl:otherwise>
</xsl:choose>
0 голосов
/ 07 июня 2010

Вы можете рассчитать суммы, как показано в примере @Eric.

Вопрос, который вы задаете в своем комментарии: Для вычисления абсолютного значения x используйте следующее выражение XPath:

(x > 0)*x - not(x > 0)*x

Например :

С предоставленным документом XML,

  <xsl:variable name="x" select="(/*/*/col[@attr2='Purchase'])[position()=last()]"/>

  <xsl:value-of select="($x > 0)*$x - not($x > 0)*$x"/>

производит

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