节点集无序是什么意思?

时间:2012-01-31 16:54:54

标签: xslt-1.0

我经常看到它说,在XSLT 1.0中,节点集是无序的,但节点集中的节点也按文档顺序处理。

听起来像节点集按文档顺序排序。

如果“无序但按文件顺序处理”和“按文件顺序排序”之间存在差异,我何时才能真正担心这种差异?

1 个答案:

答案 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;,什么时候我真的要担心   关于那个差异?

至少有两件事要注意:

  1. node-set与node-list 不同。节点列表的顺序可能与其包含的节点的文档顺序不同 - 例如xsl:apply-templates和/或xsl:for-each的节点列表,当这些指令具有{{1}时小孩。此节点列表通常具有与文档顺序不同的顺序。

  2. 文档顺序不是总排序关系。例如,(属于同一元素的)两个属性节点的位置是实现定义的,并且可以针对不同的XPath实现而变化。此外,&#34;文件顺序&#34;两个节点之间的每个节点都属于不同的文档是未定义的,并随着不同的XPath / XSLT实现而变化。

  3. 在XSLT 2.0 / XPath 2.0中,如果他在预期节点集的地方使用一系列节点,则可能会产生非常意外且令人困惑的结果 - 序列中的节点将进行重复数据删除并将进一步处理不是按顺序排列,而是按文档顺序排列。