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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает value-of select по составно строке, Конкатенация строк и отбор узлов по этой 
:(
    Опции темы
Измайлов Ф.В.
Дата 17.2.2005, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть строка <Worksheet Index412="5" Index501="6" Index502="12" Index508="13" Index509="14"/>
Конструкция вида
<xsl:value-of select="//Worksheet/@Index508"/> выдает результат
а вот такое
<xsl:variable name="v2">
<xsl:value-of select='concat("//Worksheet/@Index","508")'/>
</xsl:variable>
<xsl:value-of select="$v2"/>
не хочет никак.
В чем может быть дело?
Измайлов Ф.В.


PM MAIL   Вверх
3,14
Дата 17.2.2005, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 10
Всего: 24



Элементарно, concat срабатывает как
Код

<xsl:value-of select="//Worksheet/@Index"/><xsl:value-of select="508"/>

а так как элементов //Worksheet/@Index и 508 не обьявлено то и подставлять он ничего не подставляет.


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Измайлов Ф.В.
Дата 17.2.2005, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Попробовал рецепт - подвисает сервер.
Наверное надо цель объяснить конкатенации строк. Надо выбрать значение атрибута у Worksheeta по имени этого самого атрибута. А имя составляется из постоянной части (Index) и переменной - это или 412, 508 и т.п. В переменную попадает правильная строка, т.е concat срабатывает(//Worksheet/@Index508), строки сливает, НО... следуюущий select, который должет выбрать значение атрибута, воспринимает переменную $v2 как строку(!) а не как инструкцию отбора. Если в этом же select,вместо переменной, прописать втупую ТУЖЕ строку - показывает значение атрибута. Такое ощущение, что concat выдает строку, какую то не такую, т.е. это только стока, и ничего больше.
Вот в чем вопрос, ПОЧЕМУ так происходит. Или как обойти это?
Измайлов Ф.В.
PM MAIL   Вверх
3,14
Дата 17.2.2005, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: 10
Всего: 24



Это делается так:
xml:
Код

<?xml version="1.0"?>
<Worksheet Index412="5" Index501="6" Index502="12" Index508="13" Index509="14"/>


xsl:
Код

<?xml version="1.0"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 
  <xsl:template match="//Worksheet">
    <Indexes>
       <Index501><xsl:value-of select="//Worksheet/@*[name()='Index501']"/></Index501>
    </Indexes>
  </xsl:template>
 
</xsl:stylesheet>


полученный xml:
Код

<?xml version="1.0"?>

<Indexes>
 <Index501>6</Index501>
</Indexes>



--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
Измайлов Ф.В.
Дата 17.2.2005, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, ответ помог, но отчасти. помогла конструкция
Код

<xsl:value-of select="//Worksheet/@*[name()='Index501']"/>

я только имя атрибута стал формировать динамически
Код

<xsl:variable name="v1" select="concat('Index',@PayPeriod)"/>
<xsl:attribute name="ss:Index">
<xsl:value-of select="//Worksheet/@*[name()=$v1]"/>
</xsl:attribute>

И все заработало.. но как тяжко даются XLT преобразования!! Но когда поймешь - это вещь.
Спасибо.
Измайлов Ф.В.

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

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

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

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

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


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

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


 




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


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

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