XSL - Sumar con XSL columnas XML con el mismo nombre.

 
Vista:

Sumar con XSL columnas XML con el mismo nombre.

Publicado por GabMx (4 intervenciones) el 18/07/2008 22:05:26
Hola amigos!!

Quisiera saber si a alguien ya se le presento el siguiente problema y si puede orientarme.

Tengo el siguiente archivo XML:

<ResultedSet>
<table>
<head>
<column>Registro</column>
<column>Terminal</column>
<column>VentasTotal</column>
<column>Cancelaciones</column>
<column>VentasTotal2</column>
<column>Diferencia</column>
</head>
<body>
<row>
<column>1</column>
<column>010304800</column>
<column>7880.0</column>
<column>0.0</column>
<column>7880.0</column>
<column>0.0</column>
</row>
<row>
<column>2</column>
<column>010304900</column>
<column>8080.0</column>
<column>0.0</column>
<column>8080.0</column>
<column>0.0</column>
</row>
<row>
<column>3</column>
<column>010305000</column>
<column>7680.0</column>
<column>0.0</column>
<column>7680.0</column>
<column>0.0</column>
</row>
<row>
<column>4</column>
<column>010305100</column>
<column>8360.0</column>
<column>0.0</column>
<column>8360.0</column>
<column>0.0</column>
</row>
<row>
<column>5</column>
<column>010561600</column>
<column>8500.0</column>
<column>0.0</column>
<column>8500.0</column>
<column>0.0</column>
</row>
<row>
<column>6</column>
<column>010561800</column>
<column>11500.0</column>
<column>0.0</column>
<column>11500.0</column>
<column>0.0</column>
</row>
<row>
<column>Total</column>
<column />
<column>52000.0</column>
<column>0.0</column>
<column>52000.0</column>
<column>0.0</column>
</row>
</body>
</table>
</ResultedSet>

Y a partir de este, y a través de la siguiente transformación XSL quiero obtener unicamente la suma de los tres primeros registros. Es decir: 7880.0 + 8080.0 + 7680.0 = 23640.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/ResultedSet">
<xsl:variable name="Column1" select="table/body/row/column[1]"/>

<xsl:choose>
<xsl:when test="$Column1 = '1' and $Column1 = '2' and $Column1 = '3'">
<xsl:value-of select="sum(/column[3])"/>
</xsl:when>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>

Sin embargo, obtengo como resultado: cero (0).

De antemano, muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Obtener la suma de los registros seleccionados

Publicado por Alejandro (227 intervenciones) el 06/07/2023 20:15:56
Puede haber algunas correcciones en la lógica de su transformación XSL que impiden obtener el resultado esperado. Aquí hay una solución que puede probar:

1
2
3
4
5
6
7
8
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
  <xsl:template match="/ResultedSet">
    <xsl:variable name="rows" select="table/body/row[position() &lt;= 3]"/>
    <xsl:value-of select="sum($rows/column[3])"/>
  </xsl:template>
 
</xsl:stylesheet>

Explicación:

1. En el template raíz (`match="/ResultedSet"`), se seleccionan los primeros tres registros utilizando el predicado `[position() <= 3]`. Esto devuelve un conjunto de nodos `row` que se almacena en la variable `$rows`.

2. A continuación, se utiliza la función `sum()` para sumar los valores de la tercera columna (`column[3]`) en el conjunto de nodos `$rows`.

3. El resultado se obtiene con `<xsl:value-of select="sum($rows/column[3])"/>` y se mostrará como el resultado de la transformación.

Con esta transformación, debería obtener el resultado esperado de 23640.

Recuerde ajustar la transformación XSL según la estructura específica de su XML y los requisitos de su aplicación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar