Gerar baixa ordem caracteres não imprimíveis de XSLT
-
12-09-2019 - |
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="/"></xsl:template>
</xsl:stylesheet>
Eu recebo o seguinte erro:
[Fatal Error] :4:35: Character reference "" is an invalid XML character.
ERROR: 'Character reference "" 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
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.