No se si estoy entendiendo muy bien lo que pretendes hacer, pero aqui va otro ejemplo que espero que te aclare algo, en este ejemplo utilizamos una constante y el nº de nodos padres de un nodo en concreto (que nos lo da el for-each), en este bucle utilizamos una variable globar con la constante y una variable local al for-each que la utilizaremos para el padding a utilizar.
<xsl:variable name="indice">10</xsl:variable>
<xsl:for-each select="documentacion/categorias/categoria/descendant-or-self::*">
<
xsl:variable name="suma"><xsl:value-of select="$indice*count(node()/ancestor::*)"/></xsl:variable>
<tr>
<td align="left">
<span style="margin-left: 35px"></span>
<span class="categoria_documentacion">
<xsl:attribute name="style">padding-left:
<xsl:value-of select="$suma*2"/>px</xsl:attribute>
-<a class="enlace">
<xsl:attribute name="href">categoria=<xsl:value-of select="@id_categoria" /></xsl:attribute>
<xsl:value-of select="node()"/>
</a>
</span><br/>
</td>
</tr>
</xsl:for-each>
Como ya decia en el post al que te hacia referencia no puedes utilizar el valor de la variable a actualizar para actualizarse a si misma...( variable = variable + cte).
Esta es la forma con la que yo consigo modificar los valores de una variable, pero como ves siempre es una variable local.
Espero que te sirva de algo, y si encuentras alguna otra solución no dudes en ponerla por aqui, que seguro que nos sera de gran ayuda.
Un saludo!!!!!!