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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XSL. Значение переменной внедрить в строку 
V
    Опции темы
Compositum
  Дата 21.3.2012, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Это работает:
Код

<xsl:variable name="resVar" select="document('./resources/ru-RU.xml')"/>

но я хочу имя локализации вынести в отдельную переменную. Переписываю код так:
Код

<body> 
<!--Локализация-->
<xsl:variable name="localization" select="'ru-RU'"/>
<!--Формирую строку относительного пути-->
<xsl:variable name="pathString">
    ./resources/<xsl:value-of select="$localization"/>.xml
</xsl:variable>
<!--Отображаю значение (для тестирования)-->
<p><xsl:value-of select="$pathString"/></p>

<!--Как значение переменной pathString передать в качестве параметра функции document???-->
<xsl:variable name="resVar" select="document('./resources/{$localization}.xml')"/>



Этот код не работает. Как правильно в параметре document указать нужное мне значение?

Это сообщение отредактировал(а) Compositum - 21.3.2012, 15:32
PM   Вверх
diadiavova
Дата 21.3.2012, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Используй функцию concat


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Compositum
Дата 21.3.2012, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Цитата(diadiavova @ 21.3.2012,  15:54)
Используй функцию concat

а как быть с символом ' (апостроф)? Он ведь должен присутствовать в строке...
PM   Вверх
diadiavova
Дата 21.3.2012, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Ну в крайнем случае, в отдельную переменную его забей.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Compositum
Дата 21.3.2012, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Цитата(diadiavova @ 21.3.2012,  16:13)
Ну в крайнем случае, в отдельную переменную его забей.

вот извращение-то... :(

Я пробовал так:
Код

<!--Локализация-->
<xsl:variable name="localization" select="'ru-RU'"/>
<!--Формирую строку относительного пути-->
<xsl:variable name="pathString">
    ./resources/<xsl:value-of select="$localization"/>.xml
</xsl:variable>
<!--Отображаю значение (для тестирования)-->
<p><xsl:value-of select="$pathString"/></p>

<!--Как значение переменной pathString передать в качестве параметра функции document???-->
<xsl:variable name="resVar" select="concat('document(&quot;', $pathString,  '&quot;)')"/>

не работает. Ошибка:
Код

Выражение не возвращает узел DOM. -->$resVar/<--resources/strings/string[@name='libraryType']


Добавлено @ 16:28
проблема в том, что строка кода
Код

<xsl:value-of select="concat('document(&quot;', $pathString,  '&quot;)')"/>

генерирует такой результат:
Код

document(" ./resources/ru-RU.xml ")

содержимое кавычек начинается с пробела и заканчивается пробелом. Эти пробелы XSL добавляет сам, хотя я их не указываю... Если убрать пробелы - всё будет работать. Но блин как их убрать? Какого х.. они вообще появляются...

Это сообщение отредактировал(а) Compositum - 21.3.2012, 16:32
PM   Вверх
diadiavova
Дата 21.3.2012, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(Compositum @  21.3.2012,  17:17 Найти цитируемый пост)
Но блин как их убрать?

normalize-space



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Compositum
Дата 21.3.2012, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Цитата(diadiavova @ 21.3.2012,  16:36)
Цитата(Compositum @  21.3.2012,  17:17 Найти цитируемый пост)
Но блин как их убрать?

normalize-space

и каким макаром его прикрутить к указанному мною выражению? Ведь пробелы возникают внутри функции concat.
PM   Вверх
diadiavova
Дата 21.3.2012, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Какая разница где они возникают? Функция возвращает значение, это значение и передавай другой функции. Это в любом языке будет работать одинаково.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Compositum
Дата 21.3.2012, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Цитата(diadiavova @ 21.3.2012,  16:43)
Какая разница где они возникают? Функция возвращает значение, это значение и передавай другой функции. Это в любом языке будет работать одинаково.

ок. можешь показать на примере моей строки? Либо я чего-то не понял, либо у тебя не получится это сделать. У меня уже голова квадратная с этим XSL... :((((

Добавлено через 7 минут и 1 секунду
Вопрос снят. Получилось:
Код

<xsl:value-of select="concat('document(&quot;',normalize-space($pathString),'&quot;)')"/>

Я думал, что concat добавляет пробелы ПОСЛЕ КАЖДОГО АРГУМЕНТА. А оказалось, что он лепит их ВОКРУГ ПЕРЕМЕННОЙ $pathString.
PM   Вверх
diadiavova
Дата 21.3.2012, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Ну вот у тебя лишние пробелы выдает строка
Код

<xsl:value-of select="concat('document(&quot;', $pathString,  '&quot;)')"/>
Просто оборачиваешь ее в эту функцию
Код

<xsl:value-of select="normalize-space(concat('document(&quot;', $pathString,  '&quot;)'))"/>
Хотя, если честно, мне не очень понятно зачем делать так 
Код

concat('document(&quot;', $pathString,  '&quot;)')
. Если брать первоначальную строку
Код

 document('./resources/{$localization}.xml')
то это должно было выглядеть как-то так наверно
Код

document(concat('./resources/', $localization, '.xml')
А то, что у тебя мне вообще не понятно и как это работает - тоже. Но если работает, то нормалайз-спейс должна помочь

Это сообщение отредактировал(а) diadiavova - 21.3.2012, 16:54


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Compositum
Дата 21.3.2012, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



неа. указанный тобой вариант не рабочий.
1. параметр функции document должен быть обособлен кавычками или апострофом.
2. в твоём примере косяк со скобками.

я подправил твой вариант так:
Код

<xsl:value-of select="document(concat('&apos;./resources/', normalize-space($localization), '.xml&apos;'))"/>

но и он не заработал :(
PM   Вверх
Compositum
Дата 21.3.2012, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Senior developer
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 430
Регистрация: 6.1.2008
Где: Санкт-Петербург

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



Корректно работает такой вариант:
Код

<xsl:variable name="resVar" select="document(concat('./resources/', normalize-space($localization), '.xml'))"/>

но если в имени пути содержатся пробелы - работать перестанет. Приходится все пробелы заменять на %20. Функция replace появилась только в XSL 2.0, т.о в XSL 1.0 придётся изобретать велосипед...



Это сообщение отредактировал(а) Compositum - 21.3.2012, 17:30
PM   Вверх
diadiavova
Дата 22.3.2012, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(Compositum @  21.3.2012,  18:03 Найти цитируемый пост)
но и он не заработал :( 

Честно говоря только сегодня на свежую голову до меня дошло, на кой ляд ты туда столько апострофов напихал. Функции надо передавать строку, а не строку с апострофами, апострофы здесь - элементы языка и служат для создания текстовых литералов, а ты передаешь апострофы функции. Естественно это не заработает.
Цитата(Compositum @  21.3.2012,  18:29 Найти цитируемый пост)
Корректно работает такой вариант:

Честно говоря, я вообще понять не могу, откуда у тебя там пробелы берутся. Можешь точно написать, как ты переменную объявляешь?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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