将XSLT 1.0升级到XSLT 2.0
从XSLT 1.0升级到2.0有什么关系?
1 – 升级的可能原因是什么?
2 – 没有升级的可能原因是什么?
3 – 最后,升级的步骤是什么?
我希望有一个执行摘要 – 简短的版本:)
从XSLT 1.0升级到2.0有什么关系?
1 – 升级的可能原因是什么?
如果您是XSLT程序员,则可以从更方便,更具performance力的XSLT 2.0语言+ XPath 2.0和新的XDM(XPath数据模型)中受益。
您可能想要观看这个XSLT 2.0 Pluralsight课程,以获得对XSLT 2.0强大function的牢固和系统的理解 。
你有:
-
强大的打字和所有可用的XSDtypes。
-
定义自己的(模式)types的能力。
-
在XPath 1.0中没有任何对应的XPath 2.0序列types(简直就是缺less)。
-
在纯XSLT中定义和编写函数的function –
xsl:function
指令。 -
XPathexpression式中的范围variables(
for
子句)。 -
更好更强大的string处理 – XPath 2.0在其
tokenize()
,matches()
和replace()
函数中支持正则expression式。 -
更好更强大的string处理 – 对正则expression式的XSLT 2.0支持 –
xsl:analyze-string
,xsl:matching-substring
和xsl:non-matching-substring
新的XSLT指令。 -
更方便,function强大且富有performance力的分组:
xsl:for-each-group
指令。 -
许多新的,function非常强大的XPath 2.0函数 – 例如date,时间和持续时间等function,仅举几例。
-
新的XPath操作符
intersect
,except
>>
,<<
,some
every
instance of
,castable as
…等等。 -
一般的XPath操作符
>
,<
等现在可以处理任何有序的值types(不仅仅是XPath 1.0中的数字)。 -
新的,更安全的价值比较操作:
lt
,le
,eq
,gt
,ge
,ne
。 -
XPath 2.0
to
运算符,允许有xsl:for-each select="1 to $N"
这些以及许多其他改进/新function显着提高了任何XSLT编程人员的工作效率,这使XSLT 2.0的开发能够在使用XSLT 1.0开发相同模块所需的一小部分时间内完成。
强大的打字function可以在编译时捕捉到许多错误,并立即得到纠正。 对我来说,这种强大的types安全性是使用XSLT 2.0的最大优势。
2 – 没有升级的可能原因是什么?
-
保持现有的旧版XSLT 1.0应用程序不变,并继续在XSLT 1.0中使用它们,同时只使用XSLT 2.0开发新的应用程序,往往是可行的,合理的和经济的。
-
您的pipe理层+任何其他非技术原因。
-
有很多遗留的XSLT 1.0应用程序以不良风格编写(例如,使用DOE或现在需要重写的扩展函数以及代码重构)。
-
没有可用的XSLT 2.0处理器。
3 – 最后,升级的步骤是什么?
-
将
xsl:stylesheet
或xsl:transform
元素的version
属性从"1.0"
更改为"2.0"
。 -
删除任何
xxx:node-set()
函数。 -
删除任何能源部。
-
准备好现在
xsl:value-of
输出不仅仅是序列的第一个,而是所有的项目。 -
尝试尽可能使用新的
xsl:sequence
指令 – 用它来replace任何xsl:copy-of
指令; 当输出的types不是string或文本节点时,可以使用它来代替xsl:value-of
。 -
广泛的testing。
-
当testingvalidation代码正常工作时,开始重构(如果认为有必要)。 为任何variables,参数,模板和函数声明types是个好主意。 这样做可能会揭示新的隐藏的错误并修复它们会提高代码的质量。
-
或者,决定将哪个命名模板重写为
xsl:function
。 -
决定是否仍然需要旧版本中使用的扩展函数,或者使用XSLT新的强大function轻松地重写它们。
最后的评论 :并非所有的上述步骤都是必要的,可以停止并宣布迁移成功的零错误testing结果。 在新项目中开始使用所有XSLT 2.0 / XPath 2.0function要干净得多。
Dimitre的答案是非常全面的,并且100%准确(一如既往),但是我想补充一点。 升级到2.0处理器时,可以select将版本属性设置为“1.0”并以“向后兼容模式”运行,或将版本属性更改为“2.0”。 人们经常会问,推荐哪种方法。
我的build议是,如果你的样式表有一套很好的testing,可以尝试一下:set version =“2.0”,运行testing,如果有任何问题,修复它们。 通常这些问题将是代码从来就不是很正确的,只是偶然的工作。 但是,如果你没有一套好的testing,并担心你的工作负载的可靠性,那么离开版本=“1.0”是一个风险较低的方法:处理器将仿效XSLT 1.0的所有怪癖,例如xsl:忽略除第一项以外的所有值,以及将数字与string进行比较的奇怪规则。