XPath联合运算符和上下文

时间:2010-01-21 17:04:35

标签: xml xslt 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>内的上下文节点是什么?

1 个答案:

答案 0 :(得分: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>循环使输出顺序固定明显)。