我尝试使用XSLT文本输出来生成一个文件(以一种我无法控制的文件格式),虽然它主要是文本,但它包括低阶不可打印字符作为标志,包括在XLST文件中无效的字符(根据XSLT规范)。
我希望像下面这样的东西可以工作,但它不是有效的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="/"></xsl:template>
</xsl:stylesheet>我得到以下错误:
[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'我也尝试过使用实际的字符1,无论有没有CDATA部分、xsl:text元素、xslt-2字符映射、几种不同的编码,但我不知道如何获得二进制代码=1的ascii字符。
我不得不对我的输出进行后处理,这并不理想。
有没有办法从XSLT生成一个低阶的不可打印字符输出?
环境:Java6,内置XSL Transformer。
发布于 2009-07-09 12:56:44
您可以从XSLT调用Java类的静态方法。例如,使用以下hack将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>发布于 2009-07-12 08:16:29
我提出的另一个选择是使用xsl:param,调用环境将其设置为字符0x01。
这意味着样式表在所有环境中都需要环境支持,但在所有环境中都可以不变地工作,而不是总是在java环境中工作,并需要在其他任何地方进行更改。
我还不确定这种权衡的哪一方对我正在做的事情更可取。
https://stackoverflow.com/questions/1103045
复制相似问题