left up right
Example: from
<xsl:template match="cd">
<xsl:apply-templates select="*" />
</xsl:template>

<xsl:template match="artist | title | playlist/work">
<xsl:variable name="el">
<xsl:choose>
<xsl:when test="name() = 'artist'">h3</xsl:when>
<xsl:when test="name() = 'title' ">h4</xsl:when>
<xsl:when test="name() = 'work' ">pre</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:element name="{$el}" >
<xsl:number count="cd |artist | title | playlist |  work" 
       level="any" format="1." from="cd" /> 
<xsl:text> </xsl:text>
<xsl:value-of select="." />
</xsl:element>
</xsl:template>

The count in each case for previous nodes stops when a node matching the from pattern is reached

Result