Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从XLST生成低阶不可打印字符_Java_Xslt_Text_Binaryfiles - Fatal编程技术网

Java 从XLST生成低阶不可打印字符

Java 从XLST生成低阶不可打印字符,java,xslt,text,binaryfiles,Java,Xslt,Text,Binaryfiles,我试图使用XSLT文本输出生成一个文件(以我无法控制的文件格式),虽然它主要是文本,但它包含低阶不可打印字符作为标志,包括XLST文件中无效的字符(根据XSLT规范) 我希望下面这样的内容可以工作,但它不是有效的XSLT文件,因为它包含XSLT文件中不允许的字符: <?xml version="1.0" encoding="US-ASCII" ?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

我试图使用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="/">&#1;</xsl:template>
</xsl:stylesheet>
我也尝试过使用实际的字符1,有或没有CDATA节、xsl:text元素、xslt-2字符映射、两种不同的编码,但我不知道如何获得二进制代码为1的ascii字符

我不得不对输出进行后处理,这并不理想

有没有办法从XSLT生成单个低阶不可打印字符输出


环境:Java 6,内置XSL Transformer。

您可以从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>

您可以从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>

我想到的另一个选项是使用xsl:param,调用环境将其设置为字符0x01

这意味着样式表并不总是在java环境中工作,也不需要在其他任何地方进行更改,而是在所有环境中都需要环境支持,但在所有环境中都可以不变地工作


我还不确定这一权衡的哪一方更适合我的工作。

我提出的另一个选项是使用xsl:param,调用环境将其设置为字符0x01

这意味着样式表并不总是在java环境中工作,也不需要在其他任何地方进行更改,而是在所有环境中都需要环境支持,但在所有环境中都可以不变地工作


我还不确定这种权衡的哪一方更适合我的工作。

谢谢,这对我的环境很有效。没有纯粹的XSLT解决方案吗?我认为XSLT的初衷是产生“可读”的输出,而不是二进制数据。二进制文档格式是XSL-FO的领域。对于“真正的”二进制格式,XSL不是首选工具。我的输出主要是可读文本。我正在修改最初设计用于生成html的现有xslt样式表。只需做一点小小的改动,他们就几乎完全按照我的需要工作了。谢谢,这对我的环境很有用。没有纯粹的XSLT解决方案吗?我认为XSLT的初衷是产生“可读”的输出,而不是二进制数据。二进制文档格式是XSL-FO的领域。对于“真正的”二进制格式,XSL不是首选工具。我的输出主要是可读文本。我正在修改最初设计用于生成html的现有xslt样式表。只需一个很小的改动,他们的工作几乎完全符合我的需要。