【发布时间】:2012-03-12 08:15:27
【问题描述】:
从 XSLT 1.0 升级到 2.0 涉及什么?
1 - 升级的可能原因是什么?
2 - 不升级的可能原因是什么?
3 - 最后,升级的步骤是什么?
我希望有一个执行摘要——简短的版本:)
【问题讨论】:
从 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 course,以深入系统地了解 XSLT 2.0 的强大功能。
你有:
强类型和所有可用的 XSD 类型。
能够定义自己的(模式)类型。
XPath 2.0 序列类型在 XPath 1.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:function。
确定您是否仍需要一些旧版本中使用的扩展功能,或者您可以使用 XSLT 的新的、强大的功能轻松地重写它们。
最后说明:并非上述所有步骤都是必需的,可以停止并在零错误测试结果时宣布迁移成功。在新项目中开始使用所有 XSLT 2.0/XPath 2.0 功能会更简洁。
【讨论】:
Dimitre 的回答非常全面且 100% 准确(一如既往),但我要补充一点。升级到 2.0 处理器时,您可以选择将版本属性设置为“1.0”并以“向后兼容模式”运行,或者将版本属性更改为“2.0”。人们经常问推荐哪种方法。
我的建议是,如果您的样式表有一套好的测试,请大胆尝试:设置 version="2.0",运行测试,如果有任何问题,请修复它们。通常,问题将是一开始就不太正确的代码,只是偶然发生的。但是,如果您没有一组好的测试并且担心工作负载的可靠性,那么保留 version="1.0" 是一种风险较低的方法:处理器将模拟 XSLT 1.0 的所有怪癖,例如xsl:value-of 忽略除第一项之外的所有内容,以及将数字与字符串进行比较的奇怪规则。
【讨论】: