从XSLT 1.0升级到2.0涉及什么?1 - 升级的可能原因是什么?2 - 不升级的可能原因是什么?3 - 最后,升级的步骤是什么?
我希望有一个执行摘要 - 简短的版本:)
Dimitre的答案非常全面,100%准确(一如既往),但有一点我会补充 . 升级到2.0处理器时,您可以选择将版本属性设置为“1.0”并以“向后兼容模式”运行,或将版本属性更改为“2.0” . 人们经常会问推荐哪种方法 .
我的建议是,如果你的样式表有一套很好的测试,请采取措施:set version =“2.0”,运行测试,如果有任何问题,请修复它们 . 通常问题是代码从一开始就不是正确的,只是偶然的 . 但是如果你没有一套好的测试并且担心工作负载的可靠性,那么保留version =“1.0”是一种风险较低的方法:处理器将模拟XSLT 1.0的所有怪癖,例如xsl:value-of忽略除第一项之外的所有项,以及用于将数字与字符串进行比较的奇怪规则 .
从XSLT 1.0升级到2.0涉及什么? 1 - 升级的可能原因是什么?
如果您是XSLT程序员,那么您将从更方便和富有表现力的XSLT 2.0语言XPath 2.0和新的XDM(XPath数据模型)中受益 .
You may want to watch this XSLT 2.0 Pluralsight course to get firm and systematic understanding of the power of XSLT 2.0 .
你有:
强类型和所有可用的XSD类型 .
定义自己的(模式)类型的能力 .
XPath 2.0序列类型,在XPath 1.0中没有任何对应物(简单地丢失) .
在纯XSLT中定义和编写函数的能力 - xsl:function 指令 .
xsl:function
XPath表达式中的范围变量( for 子句) .
for
更好更强大的字符串处理 - XPath 2.0在其 tokenize() , matches() 和 replace() 函数中支持正则表达式 .
tokenize()
matches()
replace()
更好更强大的字符串处理 - XSLT 2.0支持正则表达式 - xsl:analyze-string , xsl:matching-substring 和 xsl:non-matching-substring 新的XSLT指令 .
xsl:analyze-string
xsl:matching-substring
xsl:non-matching-substring
更方便,更强大,更富有表现力的分组: xsl:for-each-group 指令 .
xsl:for-each-group
许多新的,非常强大的XPath 2.0功能 - 例如日期,时间和持续时间等功能,仅举几例 .
新的XPath运算符 intersect , except , is , >> , << , some , every , instance of , castable as ,...等
intersect
except
is
>>
<<
some
every
instance of
castable as
一般XPath运算符 > , < 等现在可以处理任何有序值类型(不仅仅是在XPath 1.0中的数字) .
>
<
新的,更安全的值比较运算符: lt , le , eq , gt , ge , ne .
lt
le
eq
gt
ge
ne
XPath 2.0 to 运算符,允许 xsl:for-each select="1 to $N"
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" .
xsl:stylesheet
xsl:transform
version
"1.0"
"2.0"
删除所有 xxx:node-set() 函数 .
xxx:node-set()
删除任何DOE .
准备好让 xsl:value-of 现在输出的不仅仅是第一个,而是一个序列的所有项目 .
xsl:value-of
尝试尽可能多地使用新的 xsl:sequence 指令 - 用它来替换任何 xsl:copy-of 指令;当输出的类型不是字符串或文本节点时,任何时候都使用它而不是 xsl:value-of .
xsl:sequence
xsl:copy-of
广泛测试 .
当测试验证代码按预期工作时,开始重构(如果认为有必要) . 为任何变量,参数,模板和函数声明类型是个好主意 . 这样做可能会揭示新的隐藏错误,修复它们会提高代码质量 .
(可选)确定要重写为 xsl:function 的命名模板 .
确定您是否仍需要旧版本中使用的某些扩展功能,或者您可以重写他们可以轻松使用XSLT的强大新功能 .
Final remarks :并非所有上述步骤都是必需的,并且可以停止并在零错误测试结果上声明迁移成功 . 在新项目中开始使用所有XSLT 2.0 / XPath 2.0功能要清晰得多 .
2 回答
Dimitre的答案非常全面,100%准确(一如既往),但有一点我会补充 . 升级到2.0处理器时,您可以选择将版本属性设置为“1.0”并以“向后兼容模式”运行,或将版本属性更改为“2.0” . 人们经常会问推荐哪种方法 .
我的建议是,如果你的样式表有一套很好的测试,请采取措施:set version =“2.0”,运行测试,如果有任何问题,请修复它们 . 通常问题是代码从一开始就不是正确的,只是偶然的 . 但是如果你没有一套好的测试并且担心工作负载的可靠性,那么保留version =“1.0”是一种风险较低的方法:处理器将模拟XSLT 1.0的所有怪癖,例如xsl:value-of忽略除第一项之外的所有项,以及用于将数字与字符串进行比较的奇怪规则 .
如果您是XSLT程序员,那么您将从更方便和富有表现力的XSLT 2.0语言XPath 2.0和新的XDM(XPath数据模型)中受益 .
You may want to watch this XSLT 2.0 Pluralsight course to get firm and systematic understanding of the power of 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的最大优势 .
通常可以,合理且经济高效地保留现有的旧版XSLT 1.0应用程序,并继续在XSLT 1.0中使用它们,同时只使用XSLT 2.0开发新的应用程序 .
您的管理层出于任何其他非技术原因 .
有很多遗留的XSLT 1.0应用程序以糟糕的方式编写(例如,使用现在需要重写的DOE或扩展函数并重构代码) .
没有可用的XSLT 2.0处理器 .
将
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的强大新功能 .
Final remarks :并非所有上述步骤都是必需的,并且可以停止并在零错误测试结果上声明迁移成功 . 在新项目中开始使用所有XSLT 2.0 / XPath 2.0功能要清晰得多 .