XSLT 1.0 为 XPath 1.0 提供的数据类型添加了一个额外的数据类型:结果树片段。
这种额外的数据类型称为结果树片段。变量可以绑定到结果树片段而不是四种基本 XPath 数据类型(字符串、数字、布尔值、节点集)之一。结果树片段表示结果树的片段。结果树片段等同于仅包含单个根节点的节点集。但是,结果树片段上允许的操作是节点集上允许的操作的子集。仅当允许对字符串进行操作时才允许对结果树片段进行操作(对字符串的操作可能涉及首先将字符串转换为数字或布尔值)。特别是,不允许在结果树片段上使用 、 和 运算
/
符//
。 —[]
https://www.w3.org/TR/xslt-10/#section-Result-Tree-Fragments
在我看来,这似乎毫无意义。我不明白为什么有人要这样做!结果树片段看起来就像是节点集的垃圾版本,需要两个中间变量和一个语言扩展来允许程序员解决这个看似任意的限制。
为了进一步说明结果树片段的无用性,这是我的兼容性垫片偷了放在一起exsl:node-set
在 MSXSL 中复制:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="exsl msxsl">
<!-- exsl:node-set -->
<msxsl:script language="JScript" implements-prefix="exsl"><![CDATA[
this['node-set'] = function (x) {
return x;
}
]]></msxsl:script>
</xsl:stylesheet>
这实际上只是返回未更改的结果树片段,这表明 MSXSL 甚至不费心将结果树片段实现为不同的类型,只是将其视为与 a 相同node-set
,进一步表明它首先没有真正的意义!
为什么存在结果树片段?
- 用例是什么?
- 为什么要添加它们?
- 为什么不只使用节点集?