transformar online example xslt

example - xslt online



Usar una entidad HTML en XSLT(por ej. & Nbsp;) (11)

¿Cuál es la mejor manera de incluir una entidad html en XSLT?

<xsl:template match="/a/node"> <xsl:value-of select="."/> <xsl:text>&nbsp;</xsl:text> </xsl:template>

este devuelve un XsltParseError


este devuelve un XsltParseError

Sí, y el motivo es que &nbsp; no es una entidad predefinida en XML o XSLT como lo es en HTML.

Solo podría usar el carácter Unicode que &nbsp; significa: &#160;


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, podría 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.


Encontré que todas estas soluciones producían un carácter en el espacio en blanco.

Usar <xsl:text> </xsl:text> resolvió el problema para mí; pero <xsl:text>#x20;</xsl:text> podría funcionar también.


Es necesario usar la entidad # x160;


Gracias por su información. He escrito una breve publicación de blog basada en lo que funcionó para mí, ya que estaba haciendo la transformación XSLT en una plantilla de Dynamicweb CMS .

La publicación del blog está aquí: Cómo agregar entidades a las plantillas XSLT .

/ Sten Hougaard


No tuve suerte con el enfoque DOCTYPE de Aku.

Lo que funcionó para mí en las transformaciones MSXML en un servidor de Windows 2003, fue

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

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


Otra posibilidad de usar entidades html desde dentro de xslt es la siguiente:

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


Puede usar la sección CDATA

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

o puede describir & nbsp en DTD local:

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

o simplemente use &#160; en lugar de &nbsp;


También es posible ampliar el enfoque desde la segunda parte de la respuesta de aku y obtener todas las referencias de caracteres conocidos disponibles, como esta:

<!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 el enfoque <xsl:text disable-output-escaping="yes"> . El último va a producir literales de cadenas 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 la plantilla XSLT a través de <!DOCTYPE ... <!ENTITY ... siempre producirá resultados consistentes con su xsl:output configuración de xsl:output .

Puede ser aconsejable utilizar una resolución de entidad local para evitar que el motor XSLT obtenga definiciones de entidades 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. Ver mi blog XSLT, entidades, Java, Xalan ... para descargar y comentar los parches.


XSLT solo maneja las cinco entidades básicas por defecto: lt , gt , apos , quot y amp . Todos los demás deben definirse como @Aku menciona.


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