2008-08-28 11 views

Respuesta

111

sección CDATA

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text> 

Se puede utilizar o puede describir & nbsp en DTD locales:

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]> 

o simplemente utilizar &#160; i n lugar de &nbsp;

5

éste devuelve un XsltParseError

Sí, y la razón de ello es que &nbsp; no es una entidad predefinida en XML o XSLT, ya que es en HTML.

Se podía utilizar el carácter Unicode, que &nbsp; significa: &#160;

14

otra posibilidad de usar entidades HTML desde XSLT es la siguiente:

<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text> 
+1

El carácter Unicode & # 160 estaba dando signos de interrogación y cuadros, dando como resultado la entidad html no escapada trabajada para mí, gracias. – AUSteve

6

XSLT sólo se ocupa de las cinco entidades básicas de forma predeterminada: lt, gt, apos, quot y amp. Todos los demás deben definirse como @Aku menciones.

5

Ahora que hay Unicode, generalmente es contraproducente usar entidades de caracteres con nombre. Yo recomendaría usar el carácter Unicode para un espacio sin interrupciones en lugar de una entidad, solo por esa razón. Alternativamente, puede usar la entidad &#160; en lugar de la entidad nombrada. El uso de entidades con nombre hace que su XML dependa de una DTD en línea o externa.

-3

un carácter de espacio entre etiquetas de texto debería ser suficiente.

22

También es posible extender el enfoque de la segunda parte de aku's answer y obtener todas las referencias de caracteres conocidos disponibles, así:

<!DOCTYPE stylesheet [ 
    <!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML" 
     "http://www.w3.org/2003/entities/2007/w3centities-f.ent"> 
    %w3centities-f; 
]> 
... 
<xsl:text>&nbsp;&minus;30&deg;</xsl:text> 

Hay cierta diferencia en el resultado, en comparación con <xsl:text disable-output-escaping="yes"> enfoque. El último va a producir literales de cadena como &nbsp; para todo tipo de resultados, incluso para <xsl:output method="text">, y esto puede ser diferente de lo que podría desear ... Por el contrario, obtener entidades definidas para plantilla XSLT a través de <!DOCTYPE ... <!ENTITY ... siempre producir salida coherente con su configuración xsl:output.

Puede ser una buena idea utilizar una resolución de entidad local para evitar que el motor XSLT obtenga definiciones de entidad de caracteres de Internet. Es posible que JAXP o los usuarios explícitos de Xalan-J necesiten un parche para que Xalan-J pueda usar la resolución correctamente.Vea mi blog XSLT, entities, Java, Xalan... para descargar y comentar los parches.

+0

+1, gracias por esto – reevesy

+1

Esto es hermoso, ojalá fuera más conocido – IcedDante

1

He encontrado todas estas soluciones producen un carácter A en el espacio en blanco.

El uso de <xsl:text> </xsl:text> me solucionó el problema; pero <xsl:text>#x20;</xsl:text> podría funcionar también.

0

Es necesario usar la entidad # x160;

+1

Es _no_x160, sino 160 decimal. – laszlok

0

No tuve suerte con el enfoque DOCTYPE de Aku.

Lo que funcionó para mí en MSXML transforma en un servidor Windows 2003, fue

<xsl:text disable-output-escaping="yes">&amp;#160;</xsl:text> 

Una especie de híbrido de los anteriores. Gracias colaboradores de Stackoverflow!