2012-02-06 66 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