Как насчет:
<data>
<xsl:variable name="var1" select="'SOME_DATA1'" />
<xsl:text><xsl:value-of select="var1"/></xsl:text>
<xsl:if test="'some_condition'">
<xsl:variable name="var2" >
<xsl:value-of select="'SOME_DATA2'"/>
</xsl:variable>
<xsl:text><xsl:value-of select="var2"/></xsl:text>
</xsl:if>
</data>
Как вы и написали, var2 не существует после /xsl:if.
Другой способ будет выглядеть так:
<xsl:variable name="var1" select="'SOME_DATA1'" />
<xsl:variable name="var2" >
<xsl:if test="'some_condition'">
<xsl:value-of select="'SOME_DATA2'"/>
</xsl:if>
</xsl:variable>
<data> <!-- Use var1 and var2 here --> </data>
Таким образом, у вас есть переменная var2, не зависящая от условия, но она пуста, если условие ложно. И у вас еще есть переменная после условия.