Pregunta

Estoy tratando de utilizar la salida de texto XSLT para generar un archivo (en un formato de archivo que no estoy en control de), y si bien es principalmente texto, que incluye de bajo orden caracteres no imprimibles como banderas, incluyendo caracteres que no son válidos dentro de un archivo XLST (según la especificación XSLT).

Me gustaría que algo así como el siguiente para trabajar, pero en cambio no es un archivo XSLT válido ya que contiene caracteres que no están permitidos en los archivos XSLT:

<?xml version="1.0" encoding="US-ASCII" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="text" encoding="US-ASCII"/>
  <xsl:template match="/">&#1;</xsl:template>
</xsl:stylesheet>

Me sale el siguiente error:

[Fatal Error] :4:35: Character reference "&#1" is an invalid XML character.
ERROR:  'Character reference "&#1" is an invalid XML character.'
FATAL ERROR:  'Could not compile stylesheet'

He intentado con un carácter real 1 también, con o sin una sección CDATA, XSL: elementos de texto, XSLT-2 mapas de caracteres, un par de diferentes codificaciones, pero no puedo encontrar la manera de conseguir un ascii personaje con código binario = 1.

he tenido que recurrir a la post-procesamiento de mi salida, que no es lo ideal.

¿Hay alguna manera de generar un solo de bajo orden salida de caracteres no imprimibles de XSLT?

Medio Ambiente: Java 6, construido en XSL Transformador

.
¿Fue útil?

Solución

Puede llamar a métodos estáticos de clases Java a partir de XSLT. Utilizar este truco, por ejemplo, para escribir 0x01 a su secuencia de salida:

<?xml version="1.0" encoding="US-ASCII" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:char="java.lang.Character" version="1.0">
    <xsl:output method="text" encoding="US-ASCII" />
    <xsl:template match="/">
        <xsl:value-of select="char:toString(1)"></xsl:value-of>
    </xsl:template>
</xsl:stylesheet>

Otros consejos

Otra opción que se me ha ocurrido con, es utilizar un XSL:. PARAM la que el entorno de la llamada fija a 0x01 caracteres

Esto significa que en lugar de trabajar siempre dentro de un entorno Java, y que requieren cambios en cualquier otro lugar, que la hoja de estilo requiere de apoyo al medio ambiente en todos los ambientes, pero puede funcionar sin cambios en todos ellos.

Aún no estoy seguro de que es preferible para lo que estoy trabajando en el lado de esa compensación.

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