Retroceder   Foros del Web > Programación para sitios web > XML

Respuesta
 
Herramientas Desplegado
Antiguo 30-ago-2004, 08:39   #1 (permalink)
Anlobama ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2004
Mensajes: 77
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.
Anlobama está desconectado   Responder Citando
Antiguo 01-sep-2004, 10:20   #2 (permalink)
cabral está en el buen camino
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 98
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.

cambia valores a variables XML
cabral está desconectado   Responder Citando
Antiguo 01-sep-2004, 15:13   #3 (permalink)
Anlobama ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2004
Mensajes: 77
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.
Anlobama está desconectado   Responder Citando
Antiguo 02-sep-2004, 00:21   #4 (permalink)
cabral está en el buen camino
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 98
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!!!!!!
cabral está desconectado   Responder Citando
Antiguo 02-sep-2004, 00:36   #5 (permalink)
cabral está en el buen camino
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 98
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!!!

cabral está desconectado   Responder Citando
Antiguo 02-sep-2004, 08:18   #6 (permalink)
Anlobama ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2004
Mensajes: 77
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!!
Anlobama está desconectado   Responder Citando
Antiguo 02-sep-2004, 10:21   #7 (permalink)
cabral está en el buen camino
 
Fecha de Ingreso: abril-2004
Ubicación: Sevilla
Mensajes: 98
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.
cabral está desconectado   Responder Citando
Respuesta
Calificación: Calificación de Tema: 1 votos, 1,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 05:23.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93