Pergunta

Eu estou tentando usar a saída de texto XSLT para gerar um arquivo (em um formato de arquivo que eu não estou no controle de), e enquanto é principalmente texto, que inclui baixa ordem caracteres não imprimíveis como bandeiras, incluindo caracteres que não são válidos dentro de um arquivo XLST (de acordo com a especificação XSLT).

Eu gostaria que algo como o abaixo para trabalho, mas em vez disso ele não é um arquivo XSLT válida, uma vez que ele contém caracteres que não são permitidos em arquivos 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>

Eu recebo o seguinte erro:

[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'

Eu tentei com um carácter actual 1 também, com ou sem uma seção CDATA, xsl: elementos de texto, xslt-2 mapas de caracteres, um par de codificações diferentes, mas eu não consigo descobrir como obter um ascii personagem com código binário = 1.

Eu tive que recorrer ao pós-processamento a minha saída, que não é ideal.

Existe alguma maneira para gerar uma baixa ordem única saída de caracteres não-imprimíveis de XSLT?

Ambiente:. Java 6, construído em XSL Transformer

Foi útil?

Solução

Você pode chamar métodos estáticos de classes Java de XSLT. Use o seguinte truque por exemplo para escrever 0x01 para o seu fluxo de saída:

<?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>

Outras dicas

Outra opção que eu vim acima com, é usar um xsl:. Param qual as chamadas conjuntos de ambiente para personagem 0x01

Isto significa que em vez de sempre de trabalho dentro de um ambiente java, e requerem mudanças em qualquer outro lugar, que a folha de estilo requer suporte ambiental em todos os ambientes, mas pode trabalhar inalterada em todos eles.

Eu ainda não tenho certeza de qual lado da trade-off é preferível para o que eu estou trabalhando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top