С XSL проблема в том, что вы не можете изменить переменную (это больше похоже на константу, которую вы устанавливаете). Таким образом, увеличение переменной счетчика не работает.
Неуклюжий обходной путь для получения последовательного счетчика (1,2,3,4, ...) заключается в вызове position () для получения итерации тега «abc» и еще одном вызове position () для итерация вложенного тега "def". Затем вам нужно будет умножить итерацию «abc» на количество содержащихся в ней тегов «def». Вот почему это «неуклюжий» обходной путь.
Если у вас есть два вложенных тега "def", XSL будет выглядеть следующим образом:
<xsl:for-each select="abc">
<xsl:variable name="level1Count" select="position() - 1"/>
<xsl:for-each select="def">
<xsl:variable name="level2Count" select="$level1Count * 2 + position()"/>
<xsl:value-of select="$level2Count" />
</xsl:for-each>
</xsl:for-each>