Итак, я знаю, что вы не можете получить доступ к переменным вне области видимости, что они неизменны, что XSLT является функциональным, а не императивным и т. Д ...
Но мне нужен универсальный подход к чему-то, что было бы тривиально с глобальными изменяемыми переменными (это звучит как зло, просто говоря это :). Вот пример ...
<xsl:template match="t1">
<xsl:if test="someLogic">
<!-- I know, can't do this but just to explain... -->
<xsl:variable name="varName">numberOrText, maybe even some arithmetic like $varName+1</xsl:variable>
</xsl:if>
</xsl:template>
<xsl:template match="t2">
<xsl:value-of select="$varName"/>
</xsl:template>
И проблема в том, что во время обработки может быть любое количество шаблонов, таких как t1 и t2, и шаблоны, которые одновременно изменяют и используют переменную.
Возможно, часть проблемы в том, что значения зависят от порядка обработки, но это преднамеренно - это то, что требуется.
Одна возможность, о которой я подумал, - передавать значения везде как параметры. Но проблема в том, что один листовой шаблон может потребоваться изменить его, а затем обработка возобновится ... он потеряет это изменение. Если только у шаблона нет способа вернуть параметры, и тогда я смогу передать эти возвращенные параметры? Думая о чисто функциональном языке программирования общего назначения, кажется, что так можно поступить - вызывая рекурсивно, но используя возвращаемые значения для дальнейших вызовов, чтобы можно было «переносить» значения.
Я видел, как это делается с помощью расширений - вызова методов Java или чего-то в этом роде, и тогда вы можете иметь глобальные изменяемые значения, но ... я бы действительно не хотел "обманывать" подобное.
Любые указатели, идеи и т. Д., Добро пожаловать.