2012-02-06 64 views
3

我在XSLT處理器的行爲中遇到了一些特殊的差異。我想知道這背後的原因是什麼,以及在處理器差異的某處是否有完整的概述。
我測試了以下簡單的變換(具有虛設輸入):XSLT文本輸出處理器差異

在XML間諜(V 2011 SP1 X64)
<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output method="text"/> 
    <xsl:template match="/"> 
     <xsl:text>1=&#xA;2=&#xD;3=&#xD;&#xA;4=&#xA;&#xD;end</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

運行,輸出爲:

1= 
2= 
3= 
4= 

end 

在所有情況下,以十六進制在=後,並在4=行後,兩個字符已被添加,0D0A。 顯然,XML間諜替換爲&xA;&xD;由全CR + LF發生時被請求的順序CR和LF,後右彼此除了每個請求,(見3 =部分)。

但saxon9he運行的時候,我得到我運行了2.0版處理器1.0樣式的警告,並且輸出

1= 
2=3= 
4= 
end 

在這種情況下,&xA;所有的請求都取而代之的是0D 0A(所以在LF前添加了CR),但是對於&xD;的請求輸出所請求的CR,而不是另外的LF。

在XML間諜重新運行XSLT版本設置爲2.0給出了相同的結果爲1.0,所以我想這是不是導致此兩個XSLT版本不同的約定。
很可能,這只是我們必須瞭解的工具之間的差異,但我想知道這個問題是否還有更多要說的。

+0

如果輸出在樣式表文件,一個期待與單一CR RESP的第二個版本。 LF類。 – 2012-02-06 23:47:25

回答

5

2.0規範指出,使用輸出方法文本,它是實現定義的,將如何表示行結束符(更具體地說,「數據模型實例中的換行符可以使用傳統的任何字符序列輸出用於表示以選定的系統環境結束的行。「)。

的XSLT 1.0也不說(這是不是真的有什麼不同)。

某些實現可能一直使用一個單一的換行,有些人可能輸出你問什麼了,有些人可能使用你正在運行的操作系統結束默認的行。

+0

Michael,我找到了你所指的文檔,並將其添加到這裏以供參考:[xslt-xquery-serialization](http://www.w3.org/TR/xslt-xquery-serialization/) – Maestro13 2012-02-07 06:43:06