Hallo,
folgende Struktur:
<xsl:variable name="switch"></xsl:variable>
<xsl:when test="...">
<xsl:if test="$switch = 'on'">
Wird in diesem Fall nie zutreffen.
Beim ersten Durchlauf hat $switch keinen Wert und bekommt
im 2. "xsl:when" durch das 2. "xsl:if" den Wert "on".
Nein, bekommt sie nicht. Wie schon gesagt, Variablen kannst du in XSLT nicht neue Werte zuweisen.
Die Lösung hast du auch schon genannt bekommen, du must dein Template umbauen und statt der Variable einen Parameter verwenden. Dessen Wert kannst du bei einem rekursiven Aufruf des Templates neu setezen.
Grüße
Thomas