Foros del Web » Programación para mayores de 30 ;) » Programación General »

Agrupar y totalizar columnas con XSL

Estas en el tema de Agrupar y totalizar columnas con XSL en el foro de Programación General en Foros del Web. Supongamos que tengo el simple XML de los goles que hizo un jugador de futbol a lo largo de todo el torneo... Código: <partido><jugador>esteban</jugador><goles>3</goles></partido> <partido><jugador>esteban</jugador><goles>2</goles></partido> ...
  #1 (permalink)  
Antiguo 28/01/2008, 06:04
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Agrupar y totalizar columnas con XSL

Supongamos que tengo el simple XML de los goles que hizo un jugador de futbol a lo largo de todo el torneo...

Código:
<partido><jugador>esteban</jugador><goles>3</goles></partido>
<partido><jugador>esteban</jugador><goles>2</goles></partido>
<partido><jugador>juan</jugador><goles>2</goles></partido>
<partido><jugador>juan</jugador><goles>1</goles></partido>
La idea es que el HTML me muestre que esteban hizo 5 goles y que juan hizo 3 goles...

O sea, hay que agrupar los campos por jugador y totalizar los goles...

Busqué por internet y no encontré nada ni parecido...

Espero que me puedan tirar un salvavidas...

__________________
Esteban Quintana
  #2 (permalink)  
Antiguo 28/01/2008, 06:18
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 11 meses
Puntos: 24
Re: Agrupar y totalizar columnas con XSL

Con XSLT 2.0 si se puede hacer usando la instruccion: xsl:for-each-group

Puedes ver ejemplos aquí: http://www.w3.org/TR/xslt20/#grouping-examples

Sin embargo no lo he probado porque yo siempre he usado XSLT 1.0.
Con 1.0 lo único que se me ocurre (aunque es una chapuza) es hacer que en lugar de generar el valor de la suma, generes los sumandos de una variable javascript que se calcularía al cargar la página.

Ejemplo:

var suma= 3 + 2;

El 3 y el 2 saldrían en cada una de las pasadas de un xsl:for-each
__________________
Grupos de Música
Pop Music Stars
  #3 (permalink)  
Antiguo 28/01/2008, 08:08
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Re: Agrupar y totalizar columnas con XSL

Perfecto, es justamente lo que necesitaba...lo haré con 2.0...

Mil gracias aloqui !!!
__________________
Esteban Quintana
  #4 (permalink)  
Antiguo 28/01/2008, 10:26
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 11 meses
Puntos: 24
Re: Agrupar y totalizar columnas con XSL

Si no pudieras usar el 2.0, se me ha ocurrido una forma con el 1.0.
Consistiria en hacer un template recursivo, que se recorre tantas veces como el numero de elementos (count()). Tendría dos parametros, el numero de elemento actual (que se incrementa en uno cada vez), y la suma actual (que suma el valor del elemento actual cada vez). Ambos parámetros empiezan con valor '0' para la primera vez.
La recursividad se rompe cuando se llega último elmento, en cuyo caso se pinta el valor de la suma actual.

No es muy eficiente pero funcionaría. Y si el XML es tan grande que no fuese rentable hacerlo cada vez, pues se hace solo una vez, generando como salida un XML con los totales.
Dicho XML es el que se usaría después para generar los HTML.
__________________
Grupos de Música
Pop Music Stars
  #5 (permalink)  
Antiguo 28/01/2008, 11:14
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Re: Agrupar y totalizar columnas con XSL

Joder, que complicado que es usar XSLT 2.0, pensé que ya estaba un poco implementado, no encontré nada de nada para ejecutarlo...Si que está en pañales...

Bueno, veré como hacerlo en XSLT 1.0, que lástima, era tan simple esa solución...

investigaré las soluciones que me diste...GRACIAS !!!

__________________
Esteban Quintana
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:17.