2010-05-18 10 views
10

Soy completamente nuevo en el uso de XSL, así que si hay alguna información que no incluyo, házmelo saber.Cadena XSLT con entidades HTML: ¿cómo puedo hacer que se represente como HTML?

tengo una cadena en mi archivo XSLT que puedo mostrar como esto:

<xsl:value-of select="@Description/> 

y se nota arriba, dictada en un navegador como:

<div>I can't do anything about the html entities existing in the text.</div> <div>This includes quotes, like &quot;Hello World&quot; and sometimes whitespaces.&nbsp;</div> 

¿Qué puedo hacer para conseguir esta cadena representada como html, de modo que <div></div> da como resultado nuevas líneas, &quot; me da ", y &nbsp; me da un espacio?

Podría elaborar sobre cosas que ya he probado que no han funcionado, pero no sé si eso es relevante.

+0

Buena pregunta (+1). Vea mi respuesta, explicando por qué esto no es tan importante, cómo se hace esto en el espíritu de XSLT en XSLT 2.0 y por qué no se recomienda utilizar DOE (Deshabilitar el escape de salida). –

Respuesta

15

creo que desea establecer el atributo siguiente como así:

<xsl:value-of select="@Description" disable-output-escaping="yes"/> 
+0

Aha, gracias! Estaba haciendo cosas como encontrar una plantilla 'string-replace' y llamarla una y otra vez, una vez por cada entidad html. – Kache

+0

Esto 'disable-output-escaping' simplemente no funciona para mí. Ver [mi pregunta] (http://stackoverflow.com/q/25508777/356815) – basZero

3

¿Por qué es necesario tener entidades de salida? Para el navegador &nbsp; es lo mismo que &#xA0; - en ambos casos mostrará un espacio sin interrupciones.

Hay una función en XSLT 2.0 llamada character-maps, que proporciona esta funcionalidad, si es realmente necesario. Es una buena práctica de XSLT intentar no usar DOE, a menos que sea absolutamente necesario.

Además, DOE no es una característica obligatoria de XSLT y algunos procesadores XSLT pueden no implementarlo. Esto significa que una aplicación XSLT que usa DOE generalmente no es portátil en diferentes procesadores XSLT.

+0

¿Se aplican los mapas de caracteres a lo largo de todo el documento? El ejemplo de la página mostró que no estaba envuelto en algún tipo de elemento. Además, en mi caso, la cadena que obtengo viene con las entidades html (no tengo control de eso). Char-maps todavía se puede utilizar? – Kache

+0

@ Kache4: la entidad solo está en el documento XML (xhtml). El analizador siempre lo reemplaza con ' ' y esto es lo que ve el procesador XSLT.Los mapas de caracteres no saben nada sobre el documento XML; se usan cuando el resultado final se realiza (serializado). Simplemente pueden reemplazar cada aparición de ' ' con ' ' (con lo que se especifique para este mapa de caracteres). Los mapas de caracteres se utilizan para serializar todo el resultado. –

0

La razón por la que divs en HTML obtiene una línea final es completamente diferente y está relacionada con el modelo de caja de CSS. La mayoría de los navegadores aplican el estilo:

div {display:block;} 

En lugar de la pantalla estándar: en línea ;. Sin embargo, solo lo hacen a los divs en el espacio de nombres XHTML. Necesitas enviar los divs al espacio de nombres XHTML para facilitar eso. Enlazar el espacio de nombres XHTML para el XHTML prefijo en la parte superior de su documento de este modo:

<xsl:stylesheet xmnls:xhtml="http://www.w3.org/1999/xhtml" ... > 

Y entonces la salida de los divs como <xhtml:div> ... </xhtml:div> mayoría de los navegadores reconocerían la div a estar en el espacio de nombres XHTML (http://www.w3.org/1999/xhtml) y aplicar el bloque estilo.

Cuestiones relacionadas