我在XSLT处理器的行为上遇到了一些特殊的差异.我想知道这背后的原因是什么,以及处理器差异是否有完整的概述.
我测试了以下简单转换(使用虚拟输入):
<?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=
2=
3=
4=

end</xsl:text>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
在XML Spy(v 2011 sp1 x64)中运行,输出为:
1=
2=
3=
4=
end
Run Code Online (Sandbox Code Playgroud)
在所有情况下,在十六进制之后=
和之后的行中4=
,添加了两个字符,0D
并且0A
.显然,XML间谍会替换每个请求&xA;
或&xD;
完整的CR + LF事件,除非按顺序请求CR和LF,相互之后(参见3 =部分).
但是当在saxon9he中运行时,我得到一个警告,我正在运行带有v2.0处理器的v1.0样式表,输出是
1=
2=3=
4=
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下,所有请求&xA;
都被替换为0D 0A
(因此在LF前面添加CR),但是请求&xD;
输出所请求的CR,而不是额外的LF.
在XML中重新运行间谍设置XSLT版本为2.0会产生与1.0相同的结果,所以我想这两个XSLT版本中的不同之处就是导致这种情况.
最有可能的是,这只是我们必须了解的工具之间的差异,但我想知道是否还有更多关于这个问题的说法.
2.0规范声明使用输出方法文本,它是实现定义的行结尾将如何表示(更具体地说,"数据模型实例中的换行符可以使用任何通常用于表示a的字符序列输出在所选系统环境中结束的行.").
XSLT 1.0什么也没说(实际上并没有什么不同).
某些实现可能会一致地使用单个换行符,有些可能会完全按照您的要求输出,有些可能会使用您正在运行的操作系统的默认行结尾.
归档时间: |
|
查看次数: |
384 次 |
最近记录: |