xslt编码特殊字符

时间:2011-03-29 07:16:14

标签: java xslt xslt-1.0 xalan

我正在使用带有 Xalan 2.7 的Java将一个XML转换为另一个XML。

来源为StreamSource(UTF-8 Reader); 结果为StreamResult(ByteArrayOutputStream)

现在我的模板设置为使用 UTF-8 (请注意版本1.0):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" 
            indent="yes" 
            omit-xml-declaration="yes"  
            encoding="UTF-8"/>

现在我希望输出将编码所有特殊字符。类似2.0字符映射的内容,以便€ = &#euro;或十六进制等效。

如何以最少的努力做到这一点?

2 个答案:

答案 0 :(得分:2)

我假设“特殊”字符表示超出ASCII范围的任何内容。

如果您不希望在生成的XML中使用这些字符,那么您不需要将UTF-8指定为编码,因为您的内容中不会直接包含任何非ASCII字符。

您可以在XSLT样式表上指定ASCII作为output encoding,以使XSLT处理器为所有非ASCII字符输出numeric character references

JDK 6默认处理器和Xalan 2.7都支持此功能。

答案 1 :(得分:0)

我曾经有类似的要求,因为我需要通过XSLT处理不可打印的字符。 我想出了使用FilterInputStream / FilterOutputStream,它使用一个小的有限状态自动机来编组和解组这种表示法。 希望这会给你一些想法:-)