2010-04-18 11 views
5

Suena fácil, pero no es de mi sintaxis "fácil" funcionó:cómo usar XSL: valor de parámetro en el XSL: atributo name = "ancho"

<xsl:param name="length"/> 
<xsl:attribute name="width">$length</xsl:attribute> 
not 
<xsl:attribute name="width"><xsl:value-of-select="$length"></xsl:attribute> 

alguna sugerencia?

gracias

+0

Es posible que desee dar formato a su código de ejemplo para que sea más fácil de leer. Haga clic en el enlace "editar", resalte el código de muestra y haga clic en el botón de formato de código. – Filburt

+0

Buena pregunta, pero necesita formatear su código (lo hice por usted esta vez). +1. Vea mi respuesta, que ofrece dos soluciones y recomienda las mejores. :) –

Respuesta

8

<xsl:attribute name="width">$length</xsl:attribute>

Esto creará un atributo con el valor de la cadena $length. Pero desea que el valor de xsl: param se llame $length.

<xsl:attribute name="width"><xsl:value-of-select="$length"></xsl:attribute>

Aquí el elemento <xsl:value-of> no está cerrado - esto hace que el código XSLT no XML bien formado.

Solución:

Use uno de los siguientes:

  1. <xsl:attribute name="width"><xsl:value-of select="$length"/></xsl:attribute>

o

  1. <someElement width="{$length}"/>

Para facilitar la lectura y la compacidad prefieren utilizar el punto 2 anterior, siempre que sea posible.

+1

Supongo que quiere decir xsl: value-of, not xsl: value-of-select? :) – markusk

+0

@markusk: gracias por notar esto. Corregido –

1

Probablemente ni siquiera necesite xsl:attribute aquí; la forma más sencilla de hacer esto es algo como:

<someElement width="{$length}" ... >...</someElement> 
1

Su primera alternativa falla porque las variables no se expanden en los nodos de texto. Su segunda alternativa falla porque intenta llamar al <xsl:value-of-select="...">, mientras que la sintaxis correcta es <xsl:value-of select="..."/>, como se describe en la sección Generating Text with xsl:value-of en el estándar. Usted puede fijar su código utilizando

<xsl:attribute name="width"><xsl:value-of select="$length"/></xsl:attribute> 

o, como han dicho otros, puede utilizar attribute value templates:

<someElement width="{$length}" ... >...</someElement> 
Cuestiones relacionadas