2010-01-21 2 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. Мне нужно, чтобы подтвердить, что контекст для NODE_2 по отношению к/ROOT_NODE дерева выше. Я думаю/ROOT_NODE/NODE_1/NODE_11/NODE_2. Это верно?
  2. Что будет узлом контекста внутри <xsl:for-each>?

ответ

6

узла контекста в XPath является

  • либо корневой узел, когда выражение XPath является абсолютным (начинается с /)
  • или текущий узел XSLT (когда выражение является относительным)

В вашем случае контекст для второй части объединения XPath будет узлом, который был текущим до <xsl:for-each>.

Внутри каждого контекстный узел переключается на каждый узел, который выполняется итерацией.

Для результата объединения XPath необходим порядок документов. Если /ROOT_NODE/NODE_1/NODE_11/LOCALE[CO &gt;= 8] доходит до NODE_2/NODE_22/OCA в документе, тогда первая часть будет обработана первой, иначе наоборот.

В общем, не стоит полагаться на этот побочный эффект. Вы должны объявить порядок сортировки (<xsl:sort>), или не перебирать соединение разных вещей (используйте две последовательные петли <xsl:for-each>, чтобы сделать выходной порядок фиксированным и).