我经常看到它说,在XSLT 1.0中,节点集是无序的,但节点集中的节点也按文档顺序处理。
听起来像节点集按文档顺序排序。
如果“无序但按文件顺序处理”和“按文件顺序排序”之间存在差异,我何时才能真正担心这种差异?
答案 0 :(得分:0)
一组和一个序列非常不同。
在序列中,相同的项目可能不止一次出现。
根据定义,集合中的所有项目都不同 - 集合中$it1
和$it2
不能存在identical(@it1, $it2)
。
让我们拥有这个XML文档:
<a>
<b>
<a>
<c>
<a/>
</c>
</a>
</b>
</a>
和这个XPath表达式:
//a/ancestor-or-self::a
这会选择三个节点,但如果评估结果是序列,则生成的序列将包含六个节点。
如果&#34;无序但在文档中处理之间存在差异 为了&#34;和#34;按文件顺序排序&#34;,什么时候我真的要担心 关于那个差异?
至少有两件事要注意:
node-set与node-list 不同。节点列表的顺序可能与其包含的节点的文档顺序不同 - 例如xsl:apply-templates
和/或xsl:for-each
的节点列表,当这些指令具有{{1}时小孩。此节点列表通常具有与文档顺序不同的顺序。
文档顺序不是总排序关系。例如,(属于同一元素的)两个属性节点的位置是实现定义的,并且可以针对不同的XPath实现而变化。此外,&#34;文件顺序&#34;两个节点之间的每个节点都属于不同的文档是未定义的,并随着不同的XPath / XSLT实现而变化。
在XSLT 2.0 / XPath 2.0中,如果他在预期节点集的地方使用一系列节点,则可能会产生非常意外且令人困惑的结果 - 序列中的节点将进行重复数据删除并将进一步处理不是按顺序排列,而是按文档顺序排列。