将XSLT 1.0升级到XSLT 2.0

时间:2012-02-22 00:20:11

标签: xslt xslt-2.0 xslt-1.0

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

我希望获得一份执行摘要 - 简短版本:)。

2 个答案:

答案 0 :(得分:108)

  

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

     

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

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

您可能希望观看此XSLT 2.0 Pluralsight course以获得对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-stringxsl:matching-substringxsl:non-matching-substring新的XSLT指令。

    < / LI>
  • 更方便,更强大,更富有表现力的分组:xsl:for-each-group指令。

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

  • 新的XPath运算符intersectexceptis>><<some,{{1} },everyinstance of,...等

  • 一般的XPath运算符castable as>等现在可以处理任何有序的值类型(不仅仅是XPath 1.0中的数字)。

  • 新的,更安全的价值比较运营商:<ltleeqgtge。< / p>

  • XPath 2.0 ne运算符,允许to

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

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

  

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

  • 通常可以,合理且经济高效地保留现有的旧版XSLT 1.0应用程序,并继续在XSLT 1.0中使用它们,同时只开发 new 应用程序使用XSLT 2.0。

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

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

  • 没有XSLT 2.0处理器。

  

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

  • xsl:for-each select="1 to $N"version元素的xsl:stylesheet属性从xsl:transform更改为"1.0"

  • 删除所有"2.0"个功能。

  • 删除任何DOE。

  • xxx:node-set()现在不只输出序列的第一个,而是所有项目而感到惊讶。

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

  • 广泛测试。

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

  • (可选)决定将哪些命名模板重写为xsl:value-of

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

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

答案 1 :(得分:27)

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

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