したがって、スコープ外の変数にアクセスできないこと、変数が不変であること、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などのテンプレートがいくつでも存在する可能性があり、変数を変更して使用するテンプレートが存在する可能性があります。
問題の一部は、値が処理の順序に依存することですが、それは意図的なものであり、それが必要なことです。
私が考えた1つの可能性は、値をパラメーターとしてどこにでも渡すことでした。しかし、問題は、1つのリーフテンプレートでそれを変更する必要があり、その後処理が元に戻ることです...その変更は失われます。テンプレートがパラメータを返す方法がない限り、返されたパラメータを渡すことができますか?汎用の純粋な関数型プログラミング言語を考えると、これを行う方法のようです。再帰的に呼び出しますが、値を「繰り越す」ことができるように、戻り値をさらに呼び出すために使用します。
私はこれが拡張機能を使用して行われるのを見てきました-Javaメソッドなどを呼び出すと、グローバルな可変値を持つことができますが...私は実際にはそのような「チート」をしたくありません。
どんなポインタ、アイデアなども歓迎します。