XSLT является функциональным языком и поэтому имеет неизменяемые переменные - после назначения их содержимое не может быть изменено .
Тебе нужно перестать мыслить процедурно. Объясните свою проблему, и многие люди покажут вам, как решить эту проблему, не увеличивая ни одной переменной.
Например, решение может быть таким простым: :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
Latest Service:
<xsl:apply-templates select="service[@new='true'][1]"/>
New Services:
<xsl:apply-templates select="service[@new='true'][position() >1]"/>
</xsl:template>
</xsl:stylesheet>
В более сложных ситуациях вы можете написать шаблон, который вызывает себя рекурсивно, передавая определенный параметр со значением на 1 больше значения, которое он имеет в текущем вызове шаблона.