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

cambia valores a variables XML

Estas en el tema de cambia valores a variables XML en el foro de Programación General en Foros del Web. Holas... quisiera saber si se puede hacer esto Tengo una variable <xsl:variable name="myVar">valorUno</xsl:variable> Y en algun lugar del xsl poder preguntar por el valor de ...
  #1 (permalink)  
Antiguo 16/07/2004, 15:34
 
Fecha de Ingreso: agosto-2003
Mensajes: 24
Antigüedad: 21 años, 7 meses
Puntos: 0
cambia valores a variables XML

Holas... quisiera saber si se puede hacer esto
Tengo una variable
<xsl:variable name="myVar">valorUno</xsl:variable>
Y en algun lugar del xsl poder preguntar por el valor de esta variable...
...en pseudocodigo algo asi
si myVar = valorUno entonces
myVar = valosDos

en xml algo asi... pero hasta ahi quedo..
<xsl:if test="$myVar = valorUno">

Quien podria ayudarme a terminar la sintaxis?
De antemano Gracias a todos !
__________________
Leonardo Martinez
Santiago, Chile
  #2 (permalink)  
Antiguo 19/07/2004, 01:47
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 100
Antigüedad: 20 años, 10 meses
Puntos: 0
Con xsl no se puede reasignar los valores de las variables, a no ser que sean variables locales, por ejemplo dentro de un for-each, pero nunca podras reutiliar el valor que tenias antes a no ser que ese valor lo metas, a su vez en otra variable

Me explico mejor en pseudocodigo:

myVar = 2
myVar = myVar + 3 Esto no se puede hacer en xsl

de la misma forma si intentas hacer lo que tu quieres hacer te darás cuenta que te dice que no se puede definir dos veces misma variable en la misma plantilla.

Espero que te sirva de algo este comentario, si tienes mas dudas... no dudes en preguntar.
  #3 (permalink)  
Antiguo 19/07/2004, 09:25
 
Fecha de Ingreso: agosto-2003
Mensajes: 24
Antigüedad: 21 años, 7 meses
Puntos: 0
mmm no me queda clara tu explicacion al 101%
Pues bien mi requerimento inicial es poder dibujar una tabla con los colores de las filas alternadas, y para lo cual habia pensado eso de cambiar el valor a una variable que contuviera el codigo del color.
Alguna solucion alternativa a esto????
__________________
Leonardo Martinez
Santiago, Chile
  #4 (permalink)  
Antiguo 20/07/2004, 00:13
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 100
Antigüedad: 20 años, 10 meses
Puntos: 0
Para dibujar una tabla con los colores de las filas alternadas no hace falta usar variables, ya que dices que lo haces con un for-each, lo único que tendrías que hacer es preguntar por la posición del nodo que estas viendo, si la posición del nodo es impar, tomas un color, si la posición es par tomas otro, sirva este trozo de código a modo de ejemplo:

<xsl:for-each select="raiz">
<xsl:if test="(position () mod 2) = 0">
<tr>
<td align="left" style="padding-left: 10px;" class="contenidoCampoPUB1" bgcolor="#f8f8f8">
<a class="enlaceTipos">
<xsl:if test="fecha_edicion=true() and fecha_edicion!=''">
<xsl:attribute name="href"><xsl:value-of select="/publicaciones/directorio"/><xsl:value-of select="/publicaciones/llamada"/><xsl:value-of select="numero_edicion"/></xsl:attribute>
<xsl:value-of select="fecha_edicion"/>
</xsl:if>
<xsl:if test="numero_edicion=true() and numero_edicion!=''">
<xsl:attribute name="href"><xsl:value-of select="/publicaciones/directorio"/><xsl:value-of select="/publicaciones/llamada"/><xsl:value-of select="numero_edicion"/></xsl:attribute>
<xsl:if test="fecha_edicion=true() and fecha_edicion!=''"> Nº de Edición: </xsl:if>
<xsl:value-of select="numero_edicion"/>
</xsl:if>
</a>
</td>
</tr>
</xsl:if>
<xsl:if test="(position () mod 2) != 0">
<tr>
<td align="left" style="padding-left: 10px;" class="contenidoCampoPUB1" bgcolor="#f0f0f0">
<a class="enlaceTipos">
<xsl:if test="fecha_edicion=true() and fecha_edicion!=''">
<xsl:attribute name="href"><xsl:value-of select="/publicaciones/directorio"/><xsl:value-of select="/publicaciones/llamada"/><xsl:value-of select="numero_edicion"/></xsl:attribute> <xsl:value-of select="fecha_edicion"/>
</xsl:if>
<xsl:if test="numero_edicion=true() and numero_edicion!=''">
<xsl:attribute name="href"><xsl:value-of select="/publicaciones/directorio"/><xsl:value-of select="/publicaciones/llamada"/><xsl:value-of select="numero_edicion"/></xsl:attribute>
<xsl:if test="fecha_edicion=true() and fecha_edicion!=''"> Nº de Edición: </xsl:if> <xsl:value-of select="numero_edicion"/>
</xsl:if>
</a>
</td>
</tr>
</xsl:if>
</xsl:for-each>


Como puedes observar, cada uno de las filas tiene un color, lo único que miramos es la posición del nodo que estamos recorriendo, como supongo que sabrás el for-each es secuencial y recorrera los nodos según el orden que estén en el xml, simplemente intentaremos aprovechar esa situación.


Espero haberte ayudado un poco más, si sigues teniendo alguna duda... no dudes en comunicarlo.

Un saludo.
  #5 (permalink)  
Antiguo 20/07/2004, 04:24
 
Fecha de Ingreso: julio-2004
Mensajes: 4
Antigüedad: 20 años, 8 meses
Puntos: 0
Como bien dicen en w3schools:
Note: Once you have set a variable's value, you cannot change or modify that value!

Vamos, que va a ser que no se puede modificar el valor de una variable.

Saludos
  #6 (permalink)  
Antiguo 21/07/2004, 00:22
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 100
Antigüedad: 20 años, 10 meses
Puntos: 0
Aunque técnicamente es cierto lo que tmzforever dice hay que tener en cuenta, como ya he comentado anteriormente que las variables si se pueden modificar, al menos yo lo he hecho, eso sí, dentro de un for-each, veamos este ejemplo:



<xsl:variable name="edicion"><xsl:value-of select="/publicaciones/seleccionado"/></xsl:variable>
<xsl:for-each select="//edicion">
<xsl:variable name="numero"><xsl:value-of select="numero_edicion"/></xsl:variable>
<xsl:if test="$edicion!=$numero or $numero='' or $numero=false()">
......

Espero ke esto pueda serles util.

PD.- es un trozo de código falta muchas cosas más entre ellas cerrar las etiketas... no se me asusten.

Última edición por cabral; 21/07/2004 a las 00:23
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 08:59.