Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> доступ к узлу через document() и [] 
:(
    Опции темы
flashaa
Дата 23.9.2007, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 25



Здравствуйте ! Такая трудность:

Разбираю свое дерево, в одном из узлов которого есть аттрибут @param = x, где x = a, b,c (для данного примера).
Есть ещё XML-документ, в котором хранятся, так сказать, адаптированные значения параметра param.

Код

<params>
    <a>Это значение а</a>
    <b>Это значение б</b>
    <c>Это значение с</c>
</params>


Мне нужно из этого документа получить строку "Это значение х" в зависимости от значения @param в моем дереве.

По идее, должно быть вот так:
Код

 Значение параметра param  - <xsl:value-of select="document('params.xml')/params/*[name() = ./@param]/."/>



Но вышеприведенный код не работает! 

Сейчас реализовано через перебор всех узлов в params:
Код

<xsl:variable name="param" select="./@param"/>
<xsl:for-each select="document('xml/params.xml')/params/*">
    <xsl:if test="name() = $param">
        <xsl:value-of select="."/>
    </xsl:if>
 </xsl:for-each>


Cогласитесь, нехорошо перебирать все, если нужен один элемент. Помогите.

Добавлено @ 12:45
Сам отвечаю на свой вопрос: скрестил два подхода и получилось работающее решение:

Код

<xsl:variable name="param" select="./@param"/>
Значение параметра param  - <xsl:value-of select="document('params.xml')/params/*[name() = $param"/>


Т.е. сравниваю с переменной, отсюда следует, что document(), либо [] меняют текущий узел

Это сообщение отредактировал(а) flashaa - 23.9.2007, 12:46
PM MAIL   Вверх
IZ@TOP
Дата 27.9.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 2
Всего: 73



Для сравнений значений текущего узла (в контексте которого мы работаем) при обращении к другим узлам, необходимо использовать метод current:

Код

 <xsl:value-of select="document('params.xml')/params/*[name() = current()/@param]/."/>


Если я не ошибаюсь. А в вашем примере, условие будет выполнено в случае совпаления имени тега и атрибута @param в узле "document('params.xml')/params/*".
Вариант с переменной тоже вполне рабочий.

Это сообщение отредактировал(а) IZ@TOP - 27.9.2007, 14:14


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: X технологии | Следующая тема »


 




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


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

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