2011-10-25 49 views
1

例如,我一直在使用我的源xml中的度字符實體°,它在翻譯後總是以°的格式輸出並正常工作。不過,我最近不得不從xalan處理器切換到saxon,現在該字符正在作爲實際度數字符(°)輸出到html中,並且瀏覽器將其呈現爲¬∞。在xslt中保留字符實體

我真的不知道爲什麼它在xalan的工作,但我正在尋找周圍,以爲字符映射是從我在這個頁面找到了解決辦法:

http://www.xmlplease.com/xmltraining/xslt-by-example/examples/character-map_1.html

但是,當我做同樣的事情,它似乎被忽略,我仍然看到¬∞。

再一次,我使用saxon9和ant6中的xslt任務與java6。我希望我的° xml中的字符在轉換爲html時保留(或更改爲°)。任何建議?

+0

保留字符實體和一般實體是一個重大的痛苦。我也發佈了這個問題,回來一段時間:http://stackoverflow.com/questions/5985615/preserving-entity-references-when-transforming-xml-with-xslt祝你好運! –

+0

DevNull:是的,我看到了你的帖子,但它是在文本實體上,我只是在處理字符。你說你使用角色地圖來保存角色實體?我給出的鏈接中是否有任何內容缺失,因爲我嘗試了這種方式,但沒有奏效。 – rjcarr

回答

3

它看起來像新的輸出沒有標記爲UTF-8?

大多數情況下,當一個字符變爲兩個字符時,這是因爲您向瀏覽器發送UTF-8是另一種編碼(即ISO-8859-1,win-1512等)。將UTF-8編碼放在HTML標頭中可能不夠。您可能還需要將其作爲HTTP回覆中的標題。

如果XSLT解析器轉換所有實體,則使用°應該沒有幫助。

否則,您可能會設置一個標誌來避免實體翻譯?

+0

感謝您的迴應,我儘量保持utf-8始終如一,但我不是100%確定的。在頁面頂部,我有'<!DOCTYPE xhtml PUBLIC「 - // W3C // DTD XHTML 1.0 Transitional // EN」>'然後我有'」在頭上。我無法確定答案中的內容,但我會繼續努力。 – rjcarr

+0

此外,瀏覽器正在將編碼報告爲UTF-8。我改成了html5 doctype'<!DOCTYPE html>',但沒有什麼區別。而且要清楚的是,如果我查看html的來源,它會顯示度數字符(°),但在呈現的html中顯示爲∞。 – rjcarr

+0

原來這個問題與編碼有關。謝謝你的協助! – rjcarr

2

您不能強制保留輸入實體,但可以確保通過使用輸出編碼=「us-ascii」將任何非ASCII字符輸出爲實體或字符引用。

事實上,您的瀏覽器不能正確顯示度數標誌意味着文檔的編碼錯誤。使用us-ascii是解決這個問題的一種方法,但它並不能解決問題,即你的配置在某個地方出了問題(可能很難找出在哪裏)。

我不知道爲什麼你的角色地圖被忽略。假設你已經正確編寫了代碼,最可能的原因是序列化不是由XSLT處理器完成的,而是由其他方法完成的:例如,你可能正在轉換爲DOM,然後序列化DOM。

你可以在如何撒克遜串行化使用撒克遜的HTML輸出方法特殊字符的控制:字符表示 - 看到http://saxonica.com/documentation/extensions/output-extras/character-representation.xml

+1

感謝您的回覆。事實證明,這些地圖並沒有被忽略,只是沒有保留這個實體,也就是說它仍然在html中寫入字符而不是實體。無論如何,你是對的,問題在於我的編碼。我把一堆不同的頁面放在一起,結果並不是所有的頁面都被正確編碼(但正如你所說,很難說)。對不起,以前的回答也是這樣說的,所以我必須給他信用。儘管如此,非常感謝! – rjcarr

+0

別擔心,我不是一個在這個網站上關心賺取布朗尼分的人。實際上,我認爲所有的特權和觀點都是荒謬的幼稚。 –