2010-01-21 132 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>循環使輸出順序固定爲)。