Пример, который вы разместили, должен работать. Тем не менее, вы не должны делать так, чтобы в вашем случае обе переменные имели тип string, что могло бы дать удивительные результаты, если их длина отличается. Поведение оператора сравнения для разных типов данных указано в спецификации xpath для логических значений .
Чтобы избежать этого, вы можете объявить переменные с помощью атрибута select
или вручную преобразовать их в число для сравнения:
<xsl:variable name="a" select="20"/>
<xsl:variable name="b" select="10"/>
...
<xsl:if test="number($a) > number($b)">
</xsl:if>