我试图使用XSLT文本输出,以产生一个文件(在我不是在控制下的文件格式),而它主要是文本,它包括低位不可打印的字符作为标志,包括(根据XSLT规范)是无效的XLST文件内的字符。

我想的东西像下面的工作,而是它不是因为它有效的XSLT文件,它包含了未在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>

我得到以下错误:

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

我用实际字符1试过太,使用或不使用CDATA节,XSL:文本元素,XSLT-2字符映射,几个不同的编码,但我无法弄清楚如何获得ASCII字符与二进制代码= 1。

我不得不求助于后期处理我的输出,这是不理想的。

是否有任何方式来生成从XSLT单个低阶非打印字符输出?

环境:Java 6中,内置于XSL变压器

有帮助吗?

解决方案

您可以打电话从XSLT的Java类的静态方法。使用下面的劈例如写0x01至你的输出流:

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

其他提示

这是我想出来的另一种选择,就是使用一个xsl:PARAM它调用环境设置为字符0×01

这意味着不用的Java环境中一直在努力,并且无需更改任何其他地方的样式表要求在所有环境中的环境支持,但在他们所有的工作不变。

我还不知道哪个是权衡的侧优选的是,什么我的工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top