2011-03-29 223 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