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

Modificar variables en xsl

Estas en el tema de Modificar variables en xsl en el foro de Programación General en Foros del Web. Hola a todos. Tengo un problemilla, necesito mostrar una serie de botones en lugares concretos de la pagina, para ello necesito poner un elemento for-each, ...
  #1 (permalink)  
Antiguo 30/08/2004, 08:39
 
Fecha de Ingreso: agosto-2004
Mensajes: 78
Antigüedad: 19 años, 9 meses
Puntos: 0
Modificar variables en xsl

Hola a todos.

Tengo un problemilla, necesito mostrar una serie de botones en lugares concretos de la pagina, para ello necesito poner un elemento for-each, he utilizado dos variables que me indican el top y el left, y cada vez que pase por el for-each me sume un valor constante a esas variables.

Se me ha ocurrido utilizar la funcion sum pero veo que solo suma valores de etiquetas del xml, no suma una variable a una cte.

Se puede hacer lo que estoy intentando, si no, como lo hariais vosotros?

Muchisimas gracias.

Saludos.
  #2 (permalink)  
Antiguo 01/09/2004, 10:20
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 100
Antigüedad: 20 años
Puntos: 0
No se si este post se ajusta totalmente a lo que pides...pero creo entender que es algo así, ya que responde de forma general al uso de variables con XSL.

http://www.forosdelweb.com/f14/cambia-valores-variables-xml-217586/
  #3 (permalink)  
Antiguo 01/09/2004, 15:13
 
Fecha de Ingreso: agosto-2004
Mensajes: 78
Antigüedad: 19 años, 9 meses
Puntos: 0
No lo veo muy claro

Hola cabral!!!!!

En el codigo que me comentas :

<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()">

Veo que declaras una variable global (edicion) y una local al for-each (numero) pero no veo en ningun momento que modifiques el valor de la variable, se puede de verdad modificarlo?

Muchas gracias por todo cabral!!!

SAludos.
  #4 (permalink)  
Antiguo 02/09/2004, 00:21
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 100
Antigüedad: 20 años
Puntos: 0
No se si estoy entendiendo muy bien lo que pretendes hacer, pero aqui va otro ejemplo que espero que te aclare algo, en este ejemplo utilizamos una constante y el nº de nodos padres de un nodo en concreto (que nos lo da el for-each), en este bucle utilizamos una variable globar con la constante y una variable local al for-each que la utilizaremos para el padding a utilizar.


<xsl:variable name="indice">10</xsl:variable>
<xsl:for-each select="documentacion/categorias/categoria/descendant-or-self::*">
<xsl:variable name="suma"><xsl:value-of select="$indice*count(node()/ancestor::*)"/></xsl:variable>
<tr>
<td align="left">
<span style="margin-left: 35px"></span>

<span class="categoria_documentacion">
<xsl:attribute name="style">padding-left: <xsl:value-of select="$suma*2"/>px</xsl:attribute>

-<a class="enlace">
<xsl:attribute name="href">categoria=<xsl:value-of select="@id_categoria" /></xsl:attribute>
<xsl:value-of select="node()"/>
</a>
</span><br/>
</td>
</tr>
</xsl:for-each>


Como ya decia en el post al que te hacia referencia no puedes utilizar el valor de la variable a actualizar para actualizarse a si misma...( variable = variable + cte).

Esta es la forma con la que yo consigo modificar los valores de una variable, pero como ves siempre es una variable local.

Espero que te sirva de algo, y si encuentras alguna otra solución no dudes en ponerla por aqui, que seguro que nos sera de gran ayuda.

Un saludo!!!!!!
  #5 (permalink)  
Antiguo 02/09/2004, 00:36
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 100
Antigüedad: 20 años
Puntos: 0
Respecto a tu problema en particular....

podrias declararte dos variables (globales) con los valores de la posicion incial de los botones, dos variables (globales) con los valores constantes que quieres sumar y dentro del for-each, declararte dos variables (locales) que utilice la posición que estas recorriendo + el valor de una de las variables de la posicion inicial + el valor de las constantes, así puedes obtener la nueva posicion de la nueva posición del boton, espero haberme explicado bien...por si acaso intentare ponerlo en forma de ejemplo.

<xsl:variable name="top">0</xsl:variable>
<xsl:variable name="left">0</xsl:variable>
<xsl:variable name="cte_top">10</xsl:variable>
<xsl:variable name="cte_left">10</xsl:variable>
<xsl:for-each select="nodos a recorrer">
<xsl:variable "posicion_top"><xsl:value-of select="($top+$cte_top)*position()"/></xsl:variable>

<xsl:variable "posicion_left"><xsl:value-of select="($left+$cte_left)*position()"/></xsl:variable>
.....<!-- ya tendrias en posicion_top y en posicion_left la nueva posicion que buscabas -->
</xsl:for-each>
......

algo así, no te voy a negar que no lo he probado y que lo he ido construyendo sobre la marcha...pero lo que realmente importa es lo que quiero decir...bueno pruebaloo a ver si es eso lo que te hacia falta.

Ahora mismo no se me ocurre nada mas, espero que sea suficiente...un saludo y SUERTE!!!

  #6 (permalink)  
Antiguo 02/09/2004, 08:18
 
Fecha de Ingreso: agosto-2004
Mensajes: 78
Antigüedad: 19 años, 9 meses
Puntos: 0
Muchas gracias cabral!!!

Perdona que sea tan pesao, he echo este codigo, parecido al que me mandaste :

<xsl:variable name="top">60</xsl:variable>
<xsl:variable name="left">560</xsl:variable>
<xsl:variable name="cte_top">60</xsl:variable>
<xsl:variable name="cte_left">35</xsl:variable>

<xsl:for-each select="//boton">
<xsl:variable name="pos_top"><xsl:value-of select="$top+60"/></xsl:variable>
<xsl:variable name="pos_left"><xsl:value-of select="($left+cte_left)*position()"/></xsl:variable>

<table border="1">
<xsl:attribute name="style">

.....

Lo he probado pero cuando pongo "/$left+cte_left" esto sigue siendo una cte, es decir vale lo mismo en todas las veces que pasa por el for-each, lo unico que cambia el valor es cuando lo multiplico por position() pero esto se desmadra.

No se em ocurre como hacerlo.

Muchas gracias por todo cabral!!
  #7 (permalink)  
Antiguo 02/09/2004, 10:21
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 100
Antigüedad: 20 años
Puntos: 0
Ups, ha sido un fallo mio...lo que queria decir era "(cte_left*position)+left" asi obtendrias los valores (segun tus datos) 595, 640, 675... bueno creo ke era esto lo ke kerias, verda??

No dudes en preguntar lo que quieras, si podemos ayudarte lo haremos encantado, :p

Un saludo.
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 19:48.