Требуемый вывод можно получить (например), применяя расширенные атрибуты @ из и @ count из xsl:number
.Вот рабочий пример, с которого вы должны начать:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="list1/item">
<xsl:number level="any" from="list1" count="list1/item"/>
<xsl:text>. </xsl:text>
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="list1/list2/item">
<xsl:text>	</xsl:text>
<xsl:number level="any" from="list1" count="list1/item"/>
<xsl:text>.</xsl:text>
<xsl:number level="any" from="list2" count="list2/item"/>
<xsl:text>. </xsl:text>
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
Если вы хотите упростить шаблоны соответствия:
<xsl:template match="list1">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="list1/item">
<xsl:number level="any" from="list1" count="list1/item"/>
<xsl:text>. </xsl:text>
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="list2/item">
<xsl:text>	</xsl:text>
<xsl:number level="any" from="list1" count="list1/item"/>
<xsl:text>.</xsl:text>
<xsl:number level="any" from="list2" count="list2/item"/>
<xsl:text>. </xsl:text>
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
Этот последний пример правильно подтолкнет вас к дальнейшемууровни вложенности как у list3 .