2011-03-29 155 views
1

我正在使用Java与Xalan 2.7将一个XML转换为另一个。xslt编码特殊字符

来源是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

只要**消费者**了解XML,使用编码或实际字符就没有任何区别。 **在某些不理解XML的应用程序中使用XML实例时出现问题** – 2011-03-29 18:29:08

+0

如果使用'html'序列化方法,编码范围以外的字符最终可能会被编码为字符引用或HTML实体,但是它依赖于实现一件事即将发生。 – 2011-03-29 18:32:40

回答

0

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

2

我假设的“特”字你指的是ASCII范围之外的任何东西。

如果你不想在你得到的XML这些字符,那么你并不需要为编码指定UTF-8,因为你不会直接在你的内容有任何非ASCII字符。

只需在XSLT样式表上指定ASCII作为output encoding即可让XSLT处理器为所有非ASCII字符输出numeric character references

JDK 6默认处理器以及Xalan 2.7都支持这个功能。

+0

有趣,不知道,很好 – raffian 2012-04-02 21:49:35