Оператор объединения XPath и контекст - PullRequest
1 голос
/ 21 января 2010

У меня есть следующее:

    <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>?

1 Ответ

6 голосов
/ 21 января 2010

Узел контекста в 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>, чтобы сделать порядок вывода фиксированным и очевидным).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...