Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> xsl:function — получение узлов дерева 
V
    Опции темы
mcTep
Дата 13.7.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 25.2.2009

Репутация: 1
Всего: 6



Здравствуйте. 

Хотелось бы написать функцию для получения узлов примерно этой:
Код

    <xsl:function name="str:get-package-name" as="xs:string">
        <xsl:param name="class-name" as="xs:string"/>
        <xsl:value-of select="//entity[@langname=$class-name]/../../../@name"/>
    </xsl:function>


Saxon9 сообщает: 
Код

    XPDY0002: Cannot select a node here: the context item is undefined


И так с любой попыткой вернуть ноду.

Не мог бы кто подсказать в чем проблема?
Спасибо..
PM MAIL   Вверх
mcTep
Дата 13.7.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 25.2.2009

Репутация: 1
Всего: 6



Решил проблему.
Функции необходимо точно указать контекстный узел.. Не сразу догадался..
Код

<xsl:function name="str:get-package-name" as="xs:string">
    <xsl:param name="class-name" as="xs:string"/>
    <xsl:param name="root"/>
    <xsl:value-of select="$root/package/model/entities/entity[@langname=$class-name]/../../../@name"/>
</xsl:function>



PM MAIL   Вверх
sir_nuf_nuf
Дата 15.7.2009, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 5
Всего: 31



Странно. 
У вас получается, что $root - это имя узла или что ?


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
mcTep
Дата 21.7.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 25.2.2009

Репутация: 1
Всего: 6



Входной параметр $root это корневой узел XML-дерева в данном случае.  
Еще его можно назвать как узел, в котором находится искомый элемент, если использовать следующий код:
Код

<xsl:function name="str:get-package-name" as="xs:string">
    <xsl:param name="class-name" as="xs:string"/>
    <xsl:param name="root"/>
    <xsl:value-of select="$root//entity[@langname=$class-name]/../../../@name"/>
</xsl:function>


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0389 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.