Usar una entidad HTML en XSLT (por ejemplo,  )

Resuelto Pierre Spring asked hace 16 años • 11 respuestas

¿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

Pierre Spring avatar Aug 28 '08 15:08 Pierre Spring
Aceptado

Puedes usar la sección CDATA

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

o puedes describir   en DTD local:

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

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

aku avatar Aug 28 '2008 09:08 aku

También es posible ampliar el enfoque desde la segunda parte de la respuesta de aku y obtener todas las referencias de personajes 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 <xsl:text disable-output-escaping="yes">el enfoque. Este último producirá cadenas literales como &nbsp;para todo tipo de salida, incluso para <xsl:output method="text">, y esto puede ser diferente de lo que usted podría desear... Por el contrario, obtener entidades definidas para la plantilla XSLT a través de <!DOCTYPE ... <!ENTITY ...siempre producirá una salida consistente. con su xsl:outputconfiguración.

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. Consulte mi blog XSLT, entidades, Java, Xalan... para descargar parches y comentarios.

Sergey Ushakov avatar Sep 30 '2011 17:09 Sergey Ushakov

Otra posibilidad de utilizar entidades html desde xslt es la siguiente:

<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>
Pierre Spring avatar Aug 28 '2008 09:08 Pierre Spring

XSLT solo maneja las cinco entidades básicas de forma predeterminada: lt, gt, apos, quoty amp. Todos los demás deben definirse como lo menciona @Aku .

samjudson avatar Aug 28 '2008 09:08 samjudson