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>&nbsp;</xsl:text>
</xsl:template>

este devuelve un ErrorXsltParse

¿Fue útil?

Solución

Puedes usar la sección CDATA

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

o puedes describir &nbsp en DTD local:

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

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

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>&nbsp;&minus;30&deg;</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 &nbsp; 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">&amp;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 &nbsp; no es una entidad predefinida en XML o XSLT como lo es en HTML.

Podrías usar el carácter Unicode que &nbsp; representa: &#160;

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 &#160;, 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">&amp;#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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top