Добавление двух переменных в xslt в операторе выбора - PullRequest
0 голосов
/ 30 августа 2010
<xsl:choose>

            <xsl:when test="$cty='LOHNSTD'">
                <xsl:variable name="sum" select="$sum + $amt"/>  
            </xsl:when>
            <xsl:when test="$cty='REGPAY'">
            <xsl:variable name="sum1">
                <xsl:value-of select="$sum1 + $amt"/>
            </xsl:variable>
            </xsl:when>
        </xsl:choose>

В приведенном выше коде выдается предупреждение о том, что переменные sum и sum1 не объявлены.Параметры amt и cty передаются в этот шаблон.Может ли кто-нибудь помочь мне в суммировании на основе кодов разных категорий?

Ответы [ 3 ]

2 голосов
/ 30 августа 2010

Как уже упоминалось, у вас есть две проблемы с вашим фрагментом таблицы стилей: использование необъявленной ссылки на переменную (xsl:variable name="sum" select="$sum + $amt") и потеря области действия переменной за пределами xsl:when.

Если вы хотите объявить переменную со значением, зависящим от некоторых условий, тогда правильный ответ из Ledhund : используйте xsl:choose внутри шаблона содержимого переменной.

Также, если члены суммы являются наборами узлов, вы можете использовать это выражение:

sum($A|$B[$cty='LOHNSTD']|$C[$cty='REGPAY'])

или

$A + $B[$cty='LOHNSTD'] + $C[$cty='REGPAY']

Если вы пытаетесь изменить значение уже объявленной переменной, вам следует реорганизовать преобразование, потому что это невозможно в любой декларативной парадигме, такой как XSLT.

0 голосов
/ 30 августа 2010

Во-первых, вы не можете объявить переменную внутри конструкции choose и использовать ее в другом месте. Переменная без следующих инструкций для родного брата бесполезна.

В вашем примере у вас есть две проблемы, одна из которых упомянута выше, и что вы пытаетесь использовать переменные $sum и $sum1 до того, как они будут объявлены (как подсказывает сообщение об ошибке). По сути, вы пытаетесь вычислить сумму, используя объявленную вами переменную.

Я не уверен, что вы пытаетесь достичь, но если вы дадите нам больше информации о проблеме, я уверен, что мы можем помочь вам найти лучшее решение.

0 голосов
/ 30 августа 2010

Если бы вы могли жить без двух сумм-переменных, я бы сделал это так

<xsl:variable name="sum">  
  <xsl:choose>
    <xsl:when test="$cty='LOHNSTD'">
      <xsl:value-of select="$something + $amt"/>  
    </xsl:when>
    <xsl:when test="$cty='REGPAY'">
      <xsl:value-of select="$something_else + $amt"/>
    </xsl:when>
  </xsl:choose>
</xsl:variable>

Однако, если главное - увеличить значение переменных в зависимости от какого-либо условия, вы не сможете. Переменные исправлены.

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