java - 从 XSLT 生成低位不可打印字符

标签 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" 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:text 元素、xslt-2 字符映射、几种不同的编码,但我不知道如何获得 ascii二进制代码字符 = 1。

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

有没有办法从 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>

关于java - 从 XSLT 生成低位不可打印字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1103045/

相关文章:

java web 应用程序和 xslt - 当 xml/xslt 文件更改时会发生什么?

xslt - 删除重复的 xml header

objective-c - 如何使CGContextShowTextAtPoint()自动缩小某个矩形中的文本

html - .hover 时带有 margin-top 作为 % 移动的文本,但不带有 margin-top 作为 px

java - PySpark:无法创建 SparkSession。(Java 网关错误)

java - 跳转到其他空位

java - 将 Json 字符串转换为 JSONObject 时获取 HTTP 状态 406 错误

java - 用 Java 编写 Gnome 2 面板小程序

xslt - 日期转换 YYYYMMDD 到 YYYY-MM-DD

postgresql - 如何在 Postgres 的 uuid 列中插入值?