2012-03-01 69 views
1

我正在使用xslt 1.0轉換通過.aspx頁面上的Server.Execute返回的一些xml。在谷歌瀏覽器中,如果我使用以下XSLT編碼:XSL頁面編碼

<xsl:output method="html" version="4.0" omit-xml-declaration="yes" encoding="utf-8" indent="yes" /> 

我在我的轉換的XML的頂部留下一個空格。 如果我用這個編碼:

<xsl:output method="html" version="4.0" omit-xml-declaration="yes" encoding="iso-8859-1" indent="yes" /> 

的空間已經沒有了,但事情好像£顯示爲。從來沒有真正理解我應該使用哪種編碼。請有人指出我正確的方向嗎?謝謝。

+0

豎起大拇指到UTF-8 ..「iso-8859-1」是拉丁語的本地:)對於不需要的空間,爲什麼不嘗試'strip-space'? – 2012-03-01 15:50:10

+0

感謝您的回覆。這真的很奇怪,白色空間似乎不是由任何元素產生的。它就在轉換的XML代碼的頂部。 – 2012-03-01 16:03:41

+2

你可以粘貼該XML嗎?而整個XSL? – Lukasz 2012-03-02 10:23:42

回答

1

我認爲問題在於,當您使用utf-8編碼時,輸出文件以指示編碼的前綴開頭 - 兩個字符0xEF0xBB的序列,此前綴是您看到的額外空間。

您可以檢查是否保存文件並檢查前綴是否存在 - 並查看問題是否消失手動刪除前綴。

當使用iso-8859-1(或其他非Unicode編碼)時,沒有前綴,因此沒有問題,但使用非Unicode編碼通常是一個壞主意,因爲它會產生處理非ASCII字符的問題。

要具有不帶前綴UTF-8輸出使用XmlWriter如下:

XmlWriterSettings settings = new XmlWriterSettings(); 
    settings.Encoding = new UTF8Encoding(false); 
    using (XmlWriter writer = XmlWriter.Create(response.OutputStream, settings)) { 
    // . . . apply the XSLT sending its output to 'writer' . . . 
    } 

其中response是HTTP請求的HttpResponse被服務。

+0

不錯的一個。感謝您的答覆。 – 2012-03-23 14:33:51