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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> во вложенном фориче получить значение аттрибута тэ, как получать на каждой итерации нужное з 
V
    Опции темы
Мурлыкатам_
Дата 15.1.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

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



Здравствуйте, добрые люди!

Проблема заключается в том, что один цикл вложен в другой, и у меня не получается во вложенном цикле получить значение аттрибута элемента, который указан в верхнем цикле:
Код

<xsl:for-each select="/data/sector">  <!-- sector -->
<tr>
 <td>
    <xsl:value-of select="."/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="@id"/>
 </td>
</tr>
    <xsl:for-each select="/data/subsector">    <!-- subsector -->
      <tr>
        <td>
    <small><xsl:value-of select="."/></small>
            <xsl:text> | </xsl:text>
    <xsl:value-of select="/data/sector/@id"/>      <-- Тут надо получить значение айди сектора из верхнего цикла.
    <small><xsl:value-of select="./@id"/></small>
        </td>
     </tr>
   </xsl:for-each>
</xsl:for-each>


 smile Неужели это так трудно? 
У меня получается следующий вывод:

Код

This is a test table. 
  Sector 1 s1 
Subsector 1s1u1  везде s1 - в случае первого сектора все ок
Subsector 2s1u2 
Subsector 3s1u3 
Subsector 4s1u4 
Subsector 5s1u5 
  Sector 2 s2 
Subsector 1s1u1  а тут уже должен 5 раз быть s2
Subsector 2s1u2 
Subsector 3s1u3 
Subsector 4s1u4 
Subsector 5s1u5 
  Sector 3 s3 
Subsector 1s1u1   и тут уже должен 5 раз быть s3
Subsector 2s1u2 
Subsector 3s1u3 
Subsector 4s1u4 
Subsector 5s1u5


И как я уже не изворачиваюсь.. все никак не получается. А использовать /data/sector[1]/@id - это же не здорово...
Если бы можно было бы, к примеру  /data/sector[i]/@id, а в i заносить каждый шаг цикла sector значение сектора, чтобы в подсекторе
принимать его выводить соответствующие сектор как надо. 

Это сообщение отредактировал(а) Мурлыкатам_ - 15.1.2008, 17:01


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
JVM
Дата 16.1.2008, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Мурлыкатам_ @  15.1.2008,  17:00 Найти цитируемый пост)
  Неужели это так трудно? 

Это не трудно, но для решения проблемы нужен исходный XML(который ты удалил) и понимать какой результат нужен.

ЗЫ: Тот XSLT, который ты привел полная чушь и в нем не хочется разбираться.
PM MAIL   Вверх
maxim1000
Дата 16.1.2008, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 110



ну так сохрани его в переменную:
Код

<xsl:variable name="qqq" select="@id"/>

а потом используй:
Код

<xsl:value-of select="$qqq"/>



--------------------
qqq
PM WWW   Вверх
Мурлыкатам_
Дата 16.1.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

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



Входной документ:
Код

<data>
    <item id="i1" sector="s1" subsector="u1">561</item>
    <item id="i10" sector="s3" subsector="u4">15</item>
    <item id="i22" sector="s2" subsector="u2">1234</item>
    <item id="i11" sector="s1" subsector="u2">123</item>
    <item id="i17" sector="s1" subsector="u3">165</item>
    <item id="i61" sector="s2" subsector="u1">346</item>
    <item id="i12" sector="s2" subsector="u5">3425</item>
    <item id="i2" sector="s3" subsector="u4">78</item>
    <item id="i14" sector="s3" subsector="u4">51</item>
    <item id="i21" sector="s1" subsector="u5">346</item>
    <item id="i39" sector="s3" subsector="u2">463</item>
    <item id="i44" sector="s2" subsector="u3">151</item>
    <item id="i89" sector="s1" subsector="u1">451</item>
    <item id="i81" sector="s2" subsector="u4">771</item>
    <item id="i36" sector="s2" subsector="u5">5654</item>
    <item id="i27" sector="s3" subsector="u3">362</item>
    <item id="i15" sector="s1" subsector="u5">234</item>
    <item id="i18" sector="s3" subsector="u2">73</item>
    <item id="i51" sector="s3" subsector="u5">567</item>
    <item id="i254" sector="s2" subsector="u6">641</item>
    <item id="i255" sector="s4" subsector="u4">314</item>
    <sector id="s1">Sector 1</sector>
    <sector id="s2">Sector 2</sector>
    <sector id="s3">Sector 3</sector>
    <subsector id="u1">Subsector 1</subsector>
    <subsector id="u2">Subsector 2</subsector>
    <subsector id="u3">Subsector 3</subsector>
    <subsector id="u4">Subsector 4</subsector>
    <subsector id="u5">Subsector 5</subsector>
</data>


На выходе надо получить:

This is a test table. 
Sector 1 s1            <-- шаг верхнего цикла, надо как-то на каждом шаге сделать, чтобы мона было эту s1 взять во вложенном цикле.
Subsector 1 s1 u1 
Subsector 2 s1 u2 
Subsector 3 s1 u3 
Subsector 4 s1 u4 
Subsector 5 s1 u5 
 
Sector 2 s2 
Subsector 1 s1 u1   <-- тут надо s2
Subsector 2 s1 u2 
Subsector 3 s1 u3 
Subsector 4 s1 u4 
Subsector 5 s1 u5 
 
Sector 3 s3    
Subsector 1 s1 u1   <-- тут надо s3 (шаг вложенного цикла)
Subsector 2 s1 u2 
Subsector 3 s1 u3 
Subsector 4 s1 u4 
Subsector 5 s1 u5 

maxim1000, 
Цитата(maxim1000 @  16.1.2008,  12:01 Найти цитируемый пост)
ну так сохрани его в переменную:Разметка XML1:<xsl:variable name="qqq" select="@id"/>а потом используй:<xsl:value-of select="$qqq"/>


И можно будет переопределять значение этой переменной каждый шаг первого цикла?

Точно, сработало  smile  +1

Это сообщение отредактировал(а) Мурлыкатам_ - 16.1.2008, 12:18


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
maxim1000
Дата 16.1.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 7
Всего: 110



Цитата(Мурлыкатам_ @  16.1.2008,  12:09 Найти цитируемый пост)
И можно будет переопределять значение этой переменной каждый шаг первого цикла?

если быть более точным, это будет каждый раз новая переменная
название variable вообще путает: в xsl нельзя менять значение переменной после первого задания внутри xsl:variable


--------------------
qqq
PM WWW   Вверх
Мурлыкатам_
Дата 16.1.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

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



А может вы знаете какой-нить стандартный алгоритм, который разбивает выходной документ на страницы?
Т.е. после каждого 25 го элемента вложенного цикла надо поместить такой тэг:

Код

<span style="page-break-before: always"></span>


Т.е. после каждого Subsector будет по 6 - 20 значений элемента item, и по условию надо сделать так, чтобы на одной странице было не больше 25 item, причем
Код

<span style="page-break-before: always"></span>

 можно вставить только после sector / subsector. 

Как я понимаю, надо делать переменную, которая будет содержать кол-во выведеных строк с item, и при переборе 25 строк, будет вставлять разрыв страницы.


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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