2010-05-22 25 views
41

Quiero generar una comilla simple alrededor de la variable $ ID en la siguiente xsl: valor-de xsl statment.Escape de una comilla simple en la función xcat concat

<xsl:value-of select="concat('process[@Ref=',$ID,']')"></xsl:value-of> 

actualmente se imprime

[email protected]=87799989 

Por favor, hágamelo saber cómo puedo lograr esto.

Gracias de antemano, Keshav

+0

Buena pregunta (+1). Ver mi respuesta para una solución completa. :) –

+0

Buena pregunta (y respondió afortunadamente!); esto me estaba volviendo loco ! – monojohnny

Respuesta

28

Uso &apos;?

<xsl:value-of select="concat('process[@Ref=&apos;',$ID,'&apos;]')"></xsl:value-of> 

Editar: Ver Dimitre's answer para una mejor solución.

+0

hola, gracias esto funcionó para mí – keshav84

+6

Es extraño que funcionó; como ' debe decodificarse equivalente a un literal '. Tal vez un motor XSLT con errores? –

+6

No funciona para mí –

34

En XPath 1.0:

Usted puede utilizar el incorporado en las entidades &apos; y &quot;

En XSLT 1.0:

Como alternativa, puede definir sus $Q y $APOS las variables (poner el contenido (el literal "o el carácter literal") en el cuerpo de xsl:variable, no en el select attri bute).

En XPath 2.x (esto también significa 2.x XSLT y XQuery 1.x)

Simplemente escapar un apóstrofo mediante la introducción de dos apóstrofos adyacentes, escapar de una cita mediante la introducción de dos citas adyacentes, as defined by the XPath 2.0 language

+1

¿Podría darnos ejemplos? (un ejemplo dice más de 1000 palabras y empuja su respuesta a la parte superior). Gracias –

+1

@RichardGomes, consulte esto: http://stackoverflow.com/a/7617563/36305, o este: http://stackoverflow.com/a/3453956/36305, o este: http://stackoverflow.com/ a/8783655/36305 –

4
<xsl:value-of 
select="concat('process[@Ref=&apos;',$ID,'&apos;]')"></xsl:value-of> 

esto no funciona para mí. Mi solución es:

<xsl:value-of select="concat(&quot;process[@Ref='&quot;,$oidConstant,&quot;'&quot;)"></xsl:value-of> 
+0

Era escéptico, pero esto funciona: la comilla doble de texto sin formato contiene la instrucción de selección y los dobles codificados son consumidos por el analizador: nice – Paxic

31

Para ampliar la respuesta de Dimitre, puede utilizar esta solución en XSLT:

<xsl:variable name="apos">'</xsl:variable> 
<xsl:value-of select="concat('process[@Ref=',$apos,$ID,$apos,']')"></xsl:value-of> 
+2

El método variable funciona y parece el más legible (en mi humilde opinión). – monojohnny

+0

Esta es la segunda vez que esta solución me ha ahorrado horas de prueba y error y tiempo de depuración. – GuruM

+0

Parece que funciona en XSLT 1.0 y 2.0, lo que me gustó porque luego puedo ponerlo en un archivo common.xslt. –

0

Fácil Un ejemplo sería

 <xsl:variable name="varTitle" select="title" /> 
<xsl:variable name="APOS">'</xsl:variable> 
<xsl:value-of select="translate($varTitle, 'any text', $APOS)"/> 

Esto reemplazará "cualquier texto "con" en mi título.

Cuestiones relacionadas