Hallo,
<xsl:if test="position() mod 2 = 1">
<xsl:variable name="BGColor" select="'ffffff'" />
</xsl:if>
<xsl:if test="position() mod 2 = 0">
<xsl:variable name="BGColor" select="'e2ecef'" />
</xsl:if>
Dein XSL-Parser ist ganz in Ordnung. Dein Ansatz ist dagegen falsch.
So wie du es hier definiert hast, beendest du den Geltungsbereich deiner Variable mit </xsl:if>.
Wenn du im Archiv nach den Stichwöter: geltungsbereich, scope, xsl, valiable suchst, findet ausführliche Erklärungen.
Die richtige Lösung hast du mittlerweile aus SELFHTML.
Grüße
Thomas