Как определить узел внутреннего контекста в XSLT select - PullRequest
1 голос
/ 26 мая 2010

Я пытаюсь определить подмножество узлов, хранящихся в переменной objs, используя пользовательскую функцию cube: is_active:

    

Поскольку функция не допускает локальный контекст, я должен передать ее в качестве параметра (обозначается XXX). Тем не менее, обычные подозреваемые "." или «current ()» не работают, так как они ссылаются на узел контекста окружающего блока, а НЕ на текущий элемент objs, который оценивается.

Единственное решение, которое пока работает, это:

XXX=SOME_CHILD_TAG/..

Но это действительно ужасно, поскольку от родительского узла зависит правильность работы родительского узла.

Есть ли другой способ? Спасибо!

1 Ответ

0 голосов
/ 26 мая 2010

Вам необходимо использовать функцию node-set(), поддерживаемую вашим процессором xslt.

* 1004 Т.е. *

<xsl:variable name="active_cubes" select="exsl:node-set($objs)[cube:is_active(XXX) = 'TRUE']"/>

В примере предполагается, что ваш процессор поддерживает функцию exsl: node-set . Очевидно, вы должны объявить пространство имен, используя xmlns:xsl="http://www.w3.org/1999/XSL/Transform".

EDIT:

Положение контекста, описываемое current () или '.' должен быть n-ым элементом в списке узлов в $objs ( см. здесь ). Поэтому $objs[cube:is_active(.) = 'TRUE'] должно работать.

Проверка на наличие распространенных ошибок:

  • содержит ли $ objs правильные узлы,
  • возвращает ли cube: is_active строку или логическое значение,
  • есть ли в $ objs более одного узла, в противном случае предикат не имеет смысла. Вместо этого вы можете попробовать xsl:if конструкцию с test из cube:is_active($objs) = 'TRUE'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...