从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-string
、xsl:matching-substring
和xsl:non-matching-substring
新的XSLT指令。 -
更方便、更强大、更具表现力的分组:
xsl:for-each-group
指令。 -
许多新的、非常强大的XPath2.0函数,例如日期、时间和持续时间等函数。
-
新的XPath运算符
intersect
、except
、is
、>>
、<<
、some
、every
、instance of
、castable as
。。。,等 -
一般的XPath运算符
>
、<
等现在可以处理任何有序值类型(而不仅仅是XPath1.0中的数字) -
新的、更安全的值比较运算符:
lt
、le
、eq
、gt
、ge
、ne
。 -
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: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的新的强大功能轻松地重写它们。
最后一句话:并非所有上述步骤都是必要的,可以在零错误测试结果的情况下停止并宣布迁移成功。在新的项目中开始使用所有XSLT2.0/XXPath2.0功能要干净得多。
Dimitre的回答非常全面,100%准确(一如既往),但我要补充一点。当升级到2.0处理器时,您可以选择将版本属性设置为"1.0"并在"向后兼容模式"下运行,也可以将版本属性更改为"2.0"。人们经常会问建议使用哪种方法。
我的建议是,如果你的样式表有一套好的测试,那就大胆尝试:设置version="2.0",运行测试,如果有任何问题,就修复它们。通常情况下,问题将是那些一开始就不太正确的代码,只是偶然发生的。但是,如果您没有一套好的测试,并且担心工作负载的可靠性,那么离开version="1.0"是一种风险较低的方法:然后处理器将模拟XSLT1.0的所有怪癖,例如xsl:value忽略除第一项之外的所有项,以及将数字与字符串进行比较的奇怪规则。