正在将XSLT 1.0升级到XSLT 2.0



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

我希望得到一个执行摘要——简短的版本:)

从XSLT1.0升级到2.0涉及到什么?

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

如果您是一名XSLT程序员,您将从更方便、更具表现力的XSLT2.0语言+XPath2.0和新的XDM(XPath数据模型)中受益匪浅。

您可能想观看本次XSLT2.0Pluralsight课程,以获得对XSLT2.0强大功能的坚定而系统的理解

您有:

  • 强类型和所有可用的XSD类型。

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

  • XPath 2.0序列类型在XPath 1.0中没有任何对应项(只是缺少)。

  • 在纯XSLT中定义和编写函数的能力--xsl:function指令。

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

  • 更好、更强大的字符串处理——XPath2.0在其tokenize()matches()replace()函数中支持正则表达式。

  • 更好、更强大的字符串处理——XSLT2.0对正则表达式的支持——xsl:analyze-stringxsl:matching-substringxsl:non-matching-substring新的XSLT指令。

  • 更方便、更强大、更具表现力的分组:xsl:for-each-group指令。

  • 许多新的、非常强大的XPath2.0函数,例如日期、时间和持续时间等函数。

  • 新的XPath运算符intersectexceptis>><<someeveryinstance ofcastable as。。。,等

  • 一般的XPath运算符><等现在可以处理任何有序值类型(而不仅仅是XPath1.0中的数字)

  • 新的、更安全的值比较运算符:ltleeqgtgene

  • XPath 2.0 to运算符,允许使用xsl:for-each select="1 to $N"

这些以及许多其他改进/新功能显著提高了任何XSLT程序员的生产力,这使得XSLT2.0的开发只需用XSLT1.0开发相同模块所需的一小部分时间即可完成。

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

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

  • 保留现有的、遗留的XSLT1.0应用程序,并继续将其与XSLT1.0一起使用,同时使用XSLT2.0仅开发新的应用程序,这通常是可能的、合理的且具有成本效益的。

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

  • 有很多遗留的XSLT1.0应用程序以糟糕的风格编写(例如,使用DOE或扩展函数,现在需要重写和重构代码)。

  • 没有可用的XSLT 2.0处理器。

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

  • xsl:stylesheetxsl:transform元素的version属性从"1.0"更改为"2.0"

  • 删除任何xxx:node-set()函数。

  • 删除任何DOE。

  • xsl:value-of现在不仅输出序列的第一个,而且输出序列的所有项。

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

  • 广泛测试。

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

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

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

最后一句话:并非所有上述步骤都是必要的,可以在零错误测试结果的情况下停止并宣布迁移成功。在新的项目中开始使用所有XSLT2.0/XXPath2.0功能要干净得多。

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

我的建议是,如果你的样式表有一套好的测试,那就大胆尝试:设置version="2.0",运行测试,如果有任何问题,就修复它们。通常情况下,问题将是那些一开始就不太正确的代码,只是偶然发生的。但是,如果您没有一套好的测试,并且担心工作负载的可靠性,那么离开version="1.0"是一种风险较低的方法:然后处理器将模拟XSLT1.0的所有怪癖,例如xsl:value忽略除第一项之外的所有项,以及将数字与字符串进行比较的奇怪规则。

相关内容

  • 没有找到相关文章

最新更新