将XSLT 1.0升级到XSLT 2.0

Wit*_*man 58 xslt xslt-2.0 xslt-1.0

从XSLT 1.0升级到2.0涉及什么?
1 - 升级的可能原因是什么?
2 - 不升级的可能原因是什么?
3 - 最后,升级的步骤是什么?

我希望有一个执行摘要 - 简短的版本:)

Dim*_*hev 110

从XSLT 1.0升级到2.0涉及什么?

1 - 升级的可能原因是什么?

如果您是XSLT程序员,您将从更方便和富有表现力的XSLT 2.0语言+ XPath 2.0和新的XDM(XPath数据模型)中受益.

您可能希望观看此XSLT 2.0 Pluralsight课程,以便对XSLT 2.0的强大功能有一个坚定而系统的了解.

你有:

  • 强类型和所有XSD类型可用.

  • 定义自己的(模式)类型的能力.

  • 在XPath 1.0中没有任何对应物(简单地丢失)的XPath 2.0序列类型.

  • 能够在纯XSLT中定义和编写函数 - xsl:function指令.

  • XPath表达式中的范围变量(for子句).

  • 更好的和更强大的字符串处理-的XPath 2.0支持在其正则表达式tokenize(),matches()replace()功能.

  • 更好的和更强大的字符串处理- XSLT 2.0支持正则表达式-的xsl:analyze-string,xsl:matching-substringxsl:non-matching-substring新的XSLT指令.

  • 更方便,更强大,更富有表现力的分组:xsl:for-each-group指令.

  • 许多新的,非常强大的XPath 2.0功能 - 例如日期,时间和持续时间的功能,仅举几例.

  • 新的XPath运算符intersect,except,is,>>,<<,some,every,instance of,castable as,...等等.

  • 一般的XPath运算符>,<等今后任何顺序值类型的工作(不只是数字上的XPath 1.0中).

  • 新的,更安全的值比较运算符:lt,le,eq,gt,ge,ne.

  • to允许拥有的XPath 2.0 运算符xsl:for-each select="1 to $N"

这些以及许多其他改进/新功能显着提高了任何XSLT程序员的工作效率,这使得XSLT 2.0开发能够在使用XSLT 1.0开发相同模块所需的一小部分时间内完成.

强类型允许在编译时捕获许多错误并立即纠正.对我来说,这种强大的类型安全性是使用XSLT 2.0的最大优势.

2 - 不升级的可能原因是什么?

  • 通常可以,合理且经济高效地保留现有的旧版XSLT 1.0应用程序,并继续将它们与XSLT 1.0一起使用,同时仅使用XSLT 2.0 开发新的应用程序.

  • 您的管理层+任何其他非技术原因.

  • 有很多遗留的XSLT 1.0应用程序以糟糕的方式编写(例如,使用现在需要重写的DOE或扩展函数并重构代码).

  • 没有XSLT 2.0处理器.

3 - 最后,升级的步骤是什么?

  • versionxsl:stylesheetor xsl:transform元素的属性更改"1.0""2.0".

  • 删除任何xxx:node-set()功能.

  • 删除任何DOE.

  • 准备好迎接惊喜,xsl:value-of现在不仅输出第一个,而且输出序列的所有项目.

  • 尝试xsl:sequence尽可能多地使用新指令 - 用它来替换任何xsl:copy-of指令; xsl:value-of当输出的类型不是字符串或文本节点时,使用它而不是任何时间.

  • 广泛测试.

  • 当测试验证代码按预期工作时,开始重构(如果认为有必要).为任何变量,参数,模板和函数声明类型是个好主意.这样做可能会揭示新的隐藏错误,修复它们会提高代码质量.

  • (可选)确定要重写的命名模板xsl:function.

  • 确定您是否仍需要旧版本中使用的某些扩展函数,或者您可以使用XSLT的强大新功能轻松地重写它们.

最后的评论:并非所有上述步骤都是必要的,并且可以停止并在零错误测试结果上声明迁移成功.在项目中开始使用所有XSLT 2.0/XPath 2.0功能要清晰得多.

  • Dimitre,请不要低估发布上述内容的价值。令人惊奇的是,有多少使用 XSLT 的人不了解 XSLT(包括我自己,我比大多数使用它的人对它的研究要多得多)。在不淡化 3.0 重要性的情况下,我认为发布一些关于 2.0 的建议会非常有帮助,因为现在有更多的人在使用 2.0。 (2认同)
  • DOE代表禁用 - 输出 - 转义.http://www.dpawson.co.uk/xsl/sect2/N2215.html (2认同)

Mic*_*Kay 28

Dimitre的答案非常全面,100%准确(一如既往),但有一点我会补充.升级到2.0处理器时,您可以选择将版本属性设置为"1.0"并以"向后兼容模式"运行,或将版本属性更改为"2.0".人们经常会问建议使用哪种方法.

我的建议是,如果你对样式表有一套很好的测试,请选择:set version ="2.0",运行测试,如果有任何问题,请修复它们.通常问题是代码从一开始就不是正确的,只是偶然的.但是如果你没有一套好的测试并且担心工作负载的可靠性,那么保留version ="1.0"是一种风险较低的方法:处理器将模拟XSLT 1.0的所有怪癖,例如: xsl:value-of忽略除第一项之外的所有项,以及用于将数字与字符串进行比较的奇怪规则.