[英]Upgrading XSLT 1.0 to XSLT 2.0
从XSLT 1.0升级到2.0涉及什么?
1 - 升级的可能原因是什么?
2 - 不升级的可能原因是什么?
3 - 最后,升级的步骤是什么?
我希望有一个执行摘要 - 简短的版本:)
从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-substring
和xsl: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
。
XPath 2.0 to
运算符,允许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 - 最后,升级的步骤是什么?
将xsl:stylesheet
或xsl:transform
元素的version
属性从"1.0"
更改为"2.0"
。
删除任何xxx:node-set()
函数。
删除任何DOE。
准备好让xsl:value-of
现在输出的不仅仅是第一个,而是序列的所有项目。
尝试尽可能多地使用新的xsl:sequence
指令 - 用它来替换任何xsl:copy-of
指令; 当输出的类型不是字符串或文本节点时xsl:value-of
任何时候使用它代替xsl:value-of
。
广泛测试。
当测试验证代码按预期工作时,开始重构(如果认为有必要)。 为任何变量,参数,模板和函数声明类型是个好主意。 这样做可能会揭示新的隐藏错误,修复它们会提高代码质量。
(可选)决定将哪些命名模板重写为xsl:function
。
确定您是否仍需要旧版本中使用的某些扩展函数,或者您可以使用XSLT的强大新功能轻松地重写它们。
最后的评论 :并非所有上述步骤都是必要的,并且可以停止并在零错误测试结果上声明迁移成功。 在新项目中开始使用所有XSLT 2.0 / XPath 2.0功能要清晰得多。
Dimitre的答案非常全面,100%准确(一如既往),但有一点我会补充。 升级到2.0处理器时,您可以选择将版本属性设置为“1.0”并以“向后兼容模式”运行,或将版本属性更改为“2.0”。 人们经常会问建议使用哪种方法。
我的建议是,如果你对样式表有一套很好的测试,请选择:set version =“2.0”,运行测试,如果有任何问题,请修复它们。 通常问题是代码从一开始就不是正确的,只是偶然的。 但是如果你没有一套好的测试并且担心工作负载的可靠性,那么保留version =“1.0”是一种风险较低的方法:处理器将模拟XSLT 1.0的所有怪癖,例如: xsl:value-of忽略除第一项之外的所有项,以及用于将数字与字符串进行比较的奇怪规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.