2010-01-21 98 views
1

我有以下几点:的XPath联合运营商和内容

<xsl:for-each select="/ROOT_NODE/NODE_1/NODE_11/LOCALE[CO &gt;= 8] | 
NODE_2/NODE_22/OCA"> 

    </xsl:for-each> 

两个问题:

  1. 我需要确认的是相对于以上/ ROOT_NODE树NODE_2上下文。我在想/ ROOT_NODE/NODE_1/NODE_11/NODE_2。它是否正确?
  2. <xsl:for-each>里面的上下文节点是什么?

回答

6

在XPath上下文节点是

  • 任一根节点,当XPath表达式是绝对的(与/开始)
  • 或当前XSLT节点(当表达是相对的)

在您的情况下,XPath联合的第二部分的上下文将是<xsl:for-each>之前的当前节点。

在for-each中,上下文节点切换到正在迭代的每个节点。

对于XPath联合的结果,文档顺序是相关的。如果文档中的/ROOT_NODE/NODE_1/NODE_11/LOCALE[CO &gt;= 8]出现在NODE_2/NODE_22/OCA之前,则将首先处理第一部分,否则反过来处理。

不过,总的来说,依靠这种副作用并不是一个好主意。您应该声明排序顺序(<xsl:sort>),或者不迭代不同事物的并集(使用两个连续的<xsl:for-each>循环使输出顺序固定为)。