Evite restablecer la posición xslt.
Para cada grupo, debo agrupar por artistas que tengan el mismo número. En la salida debo mostrar la posición del for-each-group (resultado: 1, 2, 3), pero la posición se reinicia al entrar en el segundo bucle del grupo y la salida actual es incorrecta (resultado incorrecto: 1, 2, 1).
<xsl:for-each select="group">
<xsl:for-each-group select="artist" group-by="number">
<position>
<xsl:value-of select="position()"></xsl:value-of>
</position>
<counter>
<xsl:value-of select="count(number)"></xsl:value-of>
</counter>
</xsl:for-each-group>
</xsl:for-each>
o
<xsl:for-each select="group">
<xsl:for-each-group select="artist" group-by="number">
<position>
<xsl:value-of select="position()"></xsl:value-of>
</position>
<counter>
<xsl:value-of select="count(number)"></xsl:value-of>
</counter>
</xsl:for-each-group>
</xsl:for-each>
<?xml version="1.0" encoding="UTF-8"?>
<group>
<artist>
<number>1</number>
</artist>
<artist>
<number>1</number>
</artist>
<artist>
<number>2</number>
</artist>
<artist>
<number>2</number>
</artist>
</group>
<group>
<artist>
<number>5</number>
</artist>
<artist>
<number>5</number>
</artist>
</group>
davy.ai
Para solucionar la salida de manera que la posición se reinicie al ingresar al segundo bucle del grupo, puedes agregar una variable para llevar un registro de la posición del bucle externo y usarla en el bucle interno. Aquí tienes un ejemplo:
En este ejemplo, definimos una variable llamada
outer-pos
para almacenar la posición del bucle externo. Luego usamos esta variable junto con la funciónposition()
para calcular la posición correcta para cada bucle interno. Al restar 1 de la funciónposition()
, nos aseguramos de que la posición comience en 1 en lugar de 2 en cada grupo.Con esta modificación, la salida debería ser: