Как уже упоминалось, у вас есть две проблемы с вашим фрагментом таблицы стилей: использование необъявленной ссылки на переменную (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.