es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>
Tags:  , , ,

Answer

  1. Avatar for 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:

    <xsl:variable name="outer-pos" select="position()"></xsl:variable>
    
    <xsl:for-each select="group">
      <xsl:for-each-group select="artist" group-by="number">
        <position>
          <xsl:value-of select="$outer-pos + position() - 1"></xsl:value-of>
        </position>
        <counter>
          <xsl:value-of select="count(number)"></xsl:value-of>
        </counter>
      </xsl:for-each-group>
    </xsl:for-each>
    

    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ón position() para calcular la posición correcta para cada bucle interno. Al restar 1 de la función position(), 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:

    <position>1</position>
    <counter>2</counter>
    <position>2</position>
    <counter>2</counter>
    <position>1</position>
    <counter>2</counter>
    

Comments are closed.