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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> построить table по тегам с одинаковыми name 
:(
    Опции темы
4epT
Дата 21.3.2012, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день. Имеется xml документ вида:

Код

...
<tagname1 id="1" rownum="1">value1</tagname1>
<tagname1 id="2" rownum="2">value2</tagname1>
<tagname2 id="3" rownum="1">value3</tagname2>
<tagname2 id="4" rownum="2">value4</tagname2>
<tagname3 id="5" rownum="1">value5</tagname3>
<tagname3 id="6" rownum="2">value6</tagname3>
...


Нужно построить таблицу вида:

Код

<table>
<tr>
<td rowspan="2">
      Title
</td>
<td rowspan="2">
</td>
<td>
tagname1_1 (_1 - ознчает id элемента)
</td>
<td>
tagname2_3 (_3 - ознчает id элемента)
</td>
<td>
tagname3_5 (_5 - ознчает id элемента)
</td>
</tr>
<tr>
<td>
tagname1_2 (_2 - ознчает id элемента)
</td>
<td>
tagname2_4 (_4 - ознчает id элемента)
</td>
<td>
tagname3_6 (_6 - ознчает id элемента)
</td>
</tr>
</table>


Проблема в том что они все лежат на одном уровне, делаю for-each могу пройтись по всем тегам с одиним name, но нужно так же добавить в строку теги с другим name. Эти теги расположены в куче с другими тегами.

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


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


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

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



Я честно говоря, не понял по какому принципу их делить надо.

Добавлено через 18 секунд
Может потом посмотрю, но лучше объясни подробнее.


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


Опытный
**


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

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



Попробую подробнее описать)

Есть набор тегов:

Код

C1
C1
C1
A2
A2
A2
B3
B3
B3


Это нужно записать в таблицу:

Код

С1 - А2 - В3
С1 - А2 - В3
С1 - А2 - В3


Сейчас пытаюсь сделать это именованными шаблонами + рекурсия. 
PM MAIL   Вверх
diadiavova
Дата 21.3.2012, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(4epT @  21.3.2012,  17:02 Найти цитируемый пост)
Сейчас пытаюсь сделать это именованными шаблонами + рекурсия.  

Та не, это лишнее. Можно ведь подсчитывать количество предшественников, то есть если тегу T1 предшествует ноль таких же тегов, то он в первую строку идет, один - во вторую и так далее. Это ж простое выражение T1[count(preceding-sibling::T1) = 0] это пойдет в первую строку и т. д. Можно выражением count(preceding-sibling::T1) + 1 вычислять номер строки. Ну и для других тегов и строк все аналогично.


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


Опытный
**


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

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



У меня не много опыта в xslt ... можно немного подробнее ?)

Дело в том что строк может быть N штук ... тут как по мне без рекурсии не обойтись

Ну и все это ведь нужно оформить html, что бы каждый тег попал в свою tr и в конкретную td

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


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


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

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



Цитата(4epT @  21.3.2012,  17:15 Найти цитируемый пост)
Дело в том что строк может быть N штук ... тут как по мне без рекурсии не обойтись

Ну например ты обходишь все элементы С1 в данном наборе и для каждого создаешь строку. В этой строке у тебя будет в первой ячейке С1, во второй - А1 при этом надо брать именно тот из них, которму предшествует столько же А1, сколько С1 предшествует текущему С1
Код

<xsl:for-each select="C1">
    <xsl:variable name="current" select="." />
    <tr>
        <td><xsl:value-of select="." />
    </tr>
    <tr>
        <td><xsl:value-of select="A1[count(preceding-sibling::A1) = count($current/preceding-sibling::C1)]" />
    </tr>
    <tr>
        <td><xsl:value-of select="B1[count(preceding-sibling::B1) = count($current/preceding-sibling::C1)]" />
    </tr>
</xsl:for-each>

 
Примерно что-то в этом роде. Только там в валью-офах выражение просто для нужного тега, а тебе видимо из него надо еще что-то извлекать. Короче разбери этот пример, там все не сложно.


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

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

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

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

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


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

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


 




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


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

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