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

Gestion de variables con XSL ¿Que horror?

Estas en el tema de Gestion de variables con XSL ¿Que horror? en el foro de Programación General en Foros del Web. Estoy pintando un calendario y quiero que los días me aparezcan en un color u otro si hay incidencias para ese día, para hacerlo en ...
  #1 (permalink)  
Antiguo 22/12/2004, 11:26
 
Fecha de Ingreso: diciembre-2004
Mensajes: 44
Antigüedad: 19 años, 5 meses
Puntos: 0
Gestion de variables con XSL ¿Que horror?

Estoy pintando un calendario y quiero que los días me aparezcan en un color u otro si hay incidencias para ese día, para hacerlo en mi XSL, lo que hago es un bucle que recorre los días del mes, y por cada día busco a ver si tiene incidencia, y dependiendo de si tiene incidencia o no, lo saco de un color o de otro.

Mi problema es el siguiente estoy usando xsl:variable, pero no vale, porque no se puede cambiar el valor, entonces necesitaría saber si ha pintado la incidencia para no volver a pintar.... bueno es un poco lioso, casí dejo el código por si me podeis dar alguna idea.

El primer bucle recorre los dias y el segundo busca incidencias para cada día.
<xsl:for-each select="//registro_principal/registro[3]/fila_7/dias">
<!-- Guardamos la fecha para comprobar si existe en incidencia y el día para pintarlo -->
<xsl:variable name="fecha"><xsl:value-of select="fecha"/></xsl:variable>
<xsl:variable name="dias"><xsl:value-of select="dia"/></xsl:variable>

<!-- Buscamos la fecha guardada en las incidencias -->
<xsl:for-each select="//registro_principal/registro[3]/incidencias/incidencia">
<xsl:if test="fecha = $fecha"> <!-- En caso de existir incidencia pintar en rojo -->
<!-- no se como hacer para que esto lo pinte y no pinte lo otro-->
<td bgcolor="red"><xsl:value-of select="$dias"/></td>
</xsl:if>
</xsl:for-each>

<td bgcolor="{color}"><xsl:value-of select="dia"/></td>
</xsl:for-each>

Un saludo.
  #2 (permalink)  
Antiguo 22/12/2004, 14:54
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Hola gaspampera

Creo que en el foro de xml sabrán orientarte mejor, traslado el tema a ese foro

movido desde (x)html

saludos

Última edición por tunait; 22/12/2004 a las 14:55
  #3 (permalink)  
Antiguo 22/12/2004, 22:33
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 20 años, 4 meses
Puntos: 0
Hola, en principio te diria que pruebes con "param" y "with-param" y separes el segundo foreach en otro template al que llames desde el primero, creo que con eso se solucionaría. Para orientarte mejor, postea un ejemplo del xml.

Saludos
  #4 (permalink)  
Antiguo 23/12/2004, 02:04
 
Fecha de Ingreso: diciembre-2004
Mensajes: 44
Antigüedad: 19 años, 5 meses
Puntos: 0
Ahí va un trozo de XML

Hola Kthion, realmente lo único que me hace falta saber es como controlar en XSL, si el programa ha pasado por un sitio o no ha pasado, en programación tradicional es infinitamente sencillo usas una variable que cambia de estado y un if.... pero en XSL, no hay tu tía.

Bueno no obstante te envio un trocito de la salida del XML, aunque creo que aporta mas confusión que otra cosa... no obstante el problema pienso que no es el xml.


Este es el XML, que es el que recorre el primer bucle la etiqueta Fila_7
<fila_7>
- <dias>
<dia>1</dia>
<posicion>4</posicion>
<color>Moccasin</color>
<fecha>20040701</fecha>
</dias>
.....
..... 30 etiquetas días mas.
</fila_7>


Dentro de este mismo XML, tengo una etiqueta que se llama incidencias, que contiene las incidencias del empleado, por cada "registro" del primer bucle, recorre entero este nodo, para ver si hay o no incidencia.

- <incidencias>
- <incidencia>
<fecha>20040412</fecha>
</incidencia>
- <incidencia>
<fecha>20040413</fecha>
</incidencia>
- <incidencia>
<fecha>20040701</fecha>
</incidencia>
</incidencias>

El XSL que gestiona la salida de pantalla es el codigo que he enviado.

Mil Gracias.
  #5 (permalink)  
Antiguo 23/12/2004, 03:58
 
Fecha de Ingreso: diciembre-2004
Mensajes: 44
Antigüedad: 19 años, 5 meses
Puntos: 0
Solucionado

Como me ha sido imposible montarlo en el xsl, lo he solucionado en el XML, generando una tabla bidimensional.... pero vamos lo del xsl y su gestión de pantalla, me parece patético.

Un saludo.
  #6 (permalink)  
Antiguo 23/12/2004, 21:03
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 20 años, 4 meses
Puntos: 0
Solucion

A ver si esto es lo que necesitabas:

Xml que invente basado en tu ejemplo:
Código:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="dias-incidencias.xsl"?>
<root>
	<fila>
		<dias>
			<dia>1</dia>
			<posicion>4</posicion>
			<color>Moccasin</color>
			<fecha>20040701</fecha>
		</dias>
		<dias>
			<dia>2</dia>
			<posicion>4</posicion>
			<color>Moccasin</color>
			<fecha>20040702</fecha>
		</dias>
		<dias>
			<dia>3</dia>
			<posicion>4</posicion>
			<color>Moccasin</color>
			<fecha>20040703</fecha>
		</dias>
		<dias>
			<dia>4</dia>
			<posicion>4</posicion>
			<color>Moccasin</color>
			<fecha>20040704</fecha>
		</dias>
		<dias>
			<dia>5</dia>
			<posicion>4</posicion>
			<color>Moccasin</color>
			<fecha>20040705</fecha>
		</dias>
		<dias>
			<dia>6</dia>
			<posicion>4</posicion>
			<color>Moccasin</color>
			<fecha>20040706</fecha>
		</dias>
		<dias>
			<dia>7</dia>
			<posicion>4</posicion>
			<color>Moccasin</color>
			<fecha>20040707</fecha>
		</dias>
		<dias>
			<dia>8</dia>
			<posicion>4</posicion>
			<color>Moccasin</color>
			<fecha>20040708</fecha>
		</dias>
		<dias>
			<dia>9</dia>
			<posicion>4</posicion>
			<color>Moccasin</color>
			<fecha>20040709</fecha>
		</dias>
		<dias>
			<dia>10</dia>
			<posicion>4</posicion>
			<color>Moccasin</color>
			<fecha>20040710</fecha>
		</dias>
	</fila>
	<incidencias>
		<incidencia>
			<fecha>20040701</fecha>
		</incidencia>
		<incidencia>
			<fecha>20040703</fecha>
		</incidencia>
		<incidencia>
			<fecha>20040705</fecha>
		</incidencia>
	</incidencias>	
</root>
Xsl:
Código:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:template match="//root/fila">
		<table>
			<tr>
				<xsl:apply-templates select="dias"/>
			</tr>
		</table>
	</xsl:template>
	<xsl:template match="//root/fila/dias">
		<xsl:call-template name="incidencias">
			<xsl:with-param name="fecha" select="fecha"/>
			<xsl:with-param name="dia" select="dia"/>
		</xsl:call-template>
	</xsl:template>
	<xsl:template name="incidencias">
		<xsl:param name="fecha"/>
		<xsl:param name="dia"/>
		<xsl:choose>
			<xsl:when test="//root/incidencias/incidencia[fecha=$fecha]">
				<td bgcolor="red"><xsl:value-of select="$dia"/></td>
			</xsl:when>
			<xsl:otherwise>
				<td bgcolor="blue"><xsl:value-of select="$dia"/></td>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	<xsl:template match="//root/incidencias/*">
	</xsl:template>
</xsl:stylesheet>
Resultado:
tabla de una fila y 10 columnas con los numeros del 1 al 10 en cada una, el 1,3 y 5 rojos, el resto azules.

Saludos
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 23:42.