我正在使用带有 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;
或十六进制等效。
如何以最少的努力做到这一点?
答案 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,它使用一个小的有限状态自动机来编组和解组这种表示法。 希望这会给你一些想法:-)