Pregunta
¿Cuál es la mejor manera de incluir una entidad html en XSLT?
<xsl:template match="/a/node">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
este devuelve un ErrorXsltParse
Solución
Puedes usar la sección CDATA
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
o puedes describir   en DTD local:
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp " "> ]>
o simplemente usar  
en lugar de
Otros consejos
También es posible ampliar el enfoque desde la 2ª parte de la respuesta de aku y obtenga todas las referencias de personajes conocidos disponibles, como este:
<!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> −30°</xsl:text>
Hay cierta diferencia en el resultado en comparación con <xsl:text disable-output-escaping="yes">
acercarse.Este último producirá cadenas literales como
para todo tipo de producción, incluso para <xsl:output method="text">
, y esto puede resultar diferente de lo que desearías...Por el contrario, obtener entidades definidas para la plantilla XSLT a través de <!DOCTYPE ... <!ENTITY ...
siempre producirá resultados consistentes con sus xsl:output
ajustes.
Puede ser aconsejable entonces utilizar un solucionador de entidades local para evitar que el motor XSLT obtenga definiciones de entidades de caracteres de Internet.Los usuarios de JAXP o Xalan-J explícitos pueden necesitar un parche para que Xalan-J utilice el solucionador correctamente.ver mi blog XSLT, entidades, Java, Xalan... para descarga de parches y comentarios.
Otra posibilidad de utilizar entidades html desde xslt es la siguiente:
<xsl:text disable-output-escaping="yes">&nbsp;</xsl:text>
XSLT sólo maneja las cinco entidades básicas de forma predeterminada: lt
, gt
, apos
, quot
, y amp
.Todos los demás deben definirse como @Aku menciona.
este devuelve un ErrorXsltParse
Sí, y la razón es que
no es una entidad predefinida en XML o XSLT como lo es en HTML.
Podrías usar el carácter Unicode que
representa:  
Ahora que existe Unicode, generalmente es contraproducente utilizar entidades de caracteres con nombre.Recomendaría usar el carácter Unicode para un espacio sin separación en lugar de una entidad, solo por esa razón.Alternativamente, puede utilizar la entidad  
;, en lugar de la entidad nombrada.El uso de entidades con nombre hace que su XML dependa de una DTD externa o en línea.
Descubrí que todas estas soluciones producían un carácter en el espacio en blanco.
Usando <xsl:text> </xsl:text>
resolvió el problema por mí;pero <xsl:text>#x20;</xsl:text>
podría funcionar también.
Gracias por su información.Escribí una breve publicación de blog basada en lo que funcionó para mí mientras realizaba la transformación XSLT en una plantilla del CMS web dinámico.
La publicación del blog está aquí: Cómo agregar entidades a plantillas XSLT.
/Sten Hougaard
Es necesario utilizar la entidad. #x160;
No tuve suerte con el enfoque DOCTYPE de Aku.
Lo que funcionó para mí en las transformaciones MSXML en un servidor Windows 2003 fue
<xsl:text disable-output-escaping="yes">&#160;</xsl:text>
Una especie de híbrido de lo anterior.¡Gracias a los contribuyentes de Stackoverflow!
Un carácter de espacio entre las etiquetas de texto debería ser suficiente.