将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中定义和编写函数的functionxsl:function指令。

  • XPathexpression式中的范围variables( for子句)。

  • 更好更强大的string处理 – XPath 2.0在其tokenize()matches()replace()函数中支持正则expression式。

  • 更好更强大的string处理 – 对正则expression式的XSLT 2.0支持 – xsl:analyze-stringxsl:matching-substringxsl:non-matching-substring新的XSLT指令。

  • 更方便,function强大且富有performance力的分组: xsl:for-each-group指令。

  • 许多新的,function非常强大的XPath 2.0函数 – 例如date,时间和持续时间等function,仅举几例。

  • 新的XPath操作符intersectexcept >><<some every instance ofcastable as …等等。

  • 一般的XPath操作符><等现在可以处理任何有序的值types(不仅仅是XPath 1.0中的数字)。

  • 新的,更安全的价值比较操作: ltleeqgtgene

  • 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:stylesheetxsl: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进行比较的奇怪规则。