![]() |
|
Модераторы: diadiavova |
![]()
|
|
| MasterSID |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 15.8.2005 Репутация: нет Всего: нет |
Всем привет!
Решил поизучать XSLT и придумал себе такую задачу. У нас есть XML структура такого вида:
Т.е. у нас есть дерево, элемент которого представлен тегом part, который обязательно содержит тег title и опционально text. Внутрь part можно вкладывать другой part до бесконечности. Задача такая: на основе этой структуры данных составить HTML документ, который бы представлял из себя текст, который идет в том же порядке, что и встречается в этом XML и выглядит так:
А перед этим текстом шел бы раздел Содержание, который представлял бы представлял из себя нумерованый список рекурсивно вложенный согласно данной структуре и с ссылками на соответсвующие <a name="some_id"></a>. С задачей на уровне составления отдельно списка содержания и отдельно текста (без линков) я справился. А вот с ссылками проблема. Если бы не было рекурсии, в качестве идентификатора можно было бы использовать индекс нода. getnerate-id() не получается использовать потому, что генерация содержимого и текста идет в разных шаблонах последовательно. Следовательно нужно, если это возможно, генерировать эти два фрагмента одновременно (я это себе представляю только через js и это как-то не вяжется с изучением xslt Заранее благодарен за содействие. Сейчас код выглядит так:
|
||||||
|
|||||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 22 Всего: 142 |
Ну такие индексы можно и без фора генерировать. Например в шаблоне contents ты передаешь ненужный параметр level, хотя глубину узла можно и без этого подсчитать, в то же время ты мог бы вместо него передавать id для родительского узла, а в самом шаблоне добавлять к нему дополнительный текст. Ну например если у передаваемого узла ид будет index_1, ты к нему добавляешь _1 и т. д. ну и соответственно передаешь уже его далее, как параметр. Можно, конечно, поизголяться и написать шаблон, который по узлу будет вычислять его ид, заданный в таком формате, но это мне кажется уже лишнее. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| MasterSID |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 15.8.2005 Репутация: нет Всего: нет |
Ха, спасибо! Как-то в эту сторону у меня мысль не пошла
|
|||
|
||||
| magelan |
|
|||
![]() потерял xPath ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 5.4.2010 Репутация: 7 Всего: 16 |
как вариант, если не хочется бодаться с position() передавая его и выстраивая красивые '1_1_1_1' идентификаторы, можешь по мужски брутальненько заюзать generate-id()
именные темпейты используют по необходимости, плохой стиль... обычно они нужны для построения рекурсии, либо как процедура, которая содержит кусок часто повторяющегося кода, в остальных случаях ты просто рассказываешь как обработать тот или иной тег. твой xsl должен выглядеть как-то так:
|
|||
|
||||
![]()
|
| Правила форума "XML/XSLT" | |
|
|
Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась. Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение. Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел Желаем удачи в Вашем деле! Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | XML, XSL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |