Agrupar en xsl 1.0
Publicado por Kiko (2 intervenciones) el 08/02/2006 11:28:42
Tengo el siguiente problema:
Tengo un xml, por ejemplo, de provincias:
<provincias>
<codigo>48</codigo>
<codigo>20</codigo>
<codigo>48</codigo>
<codigo>01</codigo>
<codigo>20</codigo>
<codigo>48</codigo>
<codigo>20</codigo>
<codigo>01</codigo>
</provincias>
El problema lo tengo porque quiero hacer lo siguiente:
Necesito hacer un bucle ordenado por "codigo", y comparar el codigo del registro actual del bucle con el del registro anterior dentro del bucle. Para ello, estoy intentando lo siguiente:
<xsl:for-each select="provincia/codigo">
<xsl:sort select="." />
<xsl:if test="position() = 1">
<xsl:value-of select="."/><br/>
</xsl:if>
<xsl:if test="position() != 1">
<xsl:variable name="intPosAnt" select="position()-1"/>
<xsl:variable name="provinciaant" select="../codigo[position()=$intPosAnt]"/>
ANTERIOR (<xsl:value-of select="$provinciaant"/>)<br/>
</xsl:if>
</xsl:for-each>
resulta que al intentar obtener el codigo del registro anterior mediante esta instruccion
<xsl:variable name="provinciaant" select="../codigo[position()=$intPosAnt]"/>
siempre hace referencia sobre el xml original y no sobre el xml ordenado del bucle. Asi que no puedo saber cuando cambio de provincia para dibujar su codigo.
¿existe alguna forma de saber cual es el codigo que ha pasado anteriormente por el bucle?
Tengo un xml, por ejemplo, de provincias:
<provincias>
<codigo>48</codigo>
<codigo>20</codigo>
<codigo>48</codigo>
<codigo>01</codigo>
<codigo>20</codigo>
<codigo>48</codigo>
<codigo>20</codigo>
<codigo>01</codigo>
</provincias>
El problema lo tengo porque quiero hacer lo siguiente:
Necesito hacer un bucle ordenado por "codigo", y comparar el codigo del registro actual del bucle con el del registro anterior dentro del bucle. Para ello, estoy intentando lo siguiente:
<xsl:for-each select="provincia/codigo">
<xsl:sort select="." />
<xsl:if test="position() = 1">
<xsl:value-of select="."/><br/>
</xsl:if>
<xsl:if test="position() != 1">
<xsl:variable name="intPosAnt" select="position()-1"/>
<xsl:variable name="provinciaant" select="../codigo[position()=$intPosAnt]"/>
ANTERIOR (<xsl:value-of select="$provinciaant"/>)<br/>
</xsl:if>
</xsl:for-each>
resulta que al intentar obtener el codigo del registro anterior mediante esta instruccion
<xsl:variable name="provinciaant" select="../codigo[position()=$intPosAnt]"/>
siempre hace referencia sobre el xml original y no sobre el xml ordenado del bucle. Asi que no puedo saber cuando cambio de provincia para dibujar su codigo.
¿existe alguna forma de saber cual es el codigo que ha pasado anteriormente por el bucle?
Valora esta pregunta


0