![]() |
|
Модераторы: diadiavova |
![]()
|
|
| Foo |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 20.10.2006 Репутация: нет Всего: 3 |
есть XML вида:
т.е. в <main> бывают <value1> и <value2>. Как мне в XSL используя for-each перебрать все записи <main> и если найду <value1> делать например один template а если <value2> то другой template. Пытался делать чтото вроде
или что более очевидно:
но ничего не вышло. Сори я тут наверное много ошибок сделал т.к. ни xml ни xsl ни их терминологии толком незнаю, но наверное это очень простая задача, подскажите как ее решить Это сообщение отредактировал(а) Foo - 8.12.2006, 21:58 --------------------
qip |
||||||
|
|||||||
| Foo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 20.10.2006 Репутация: нет Всего: 3 |
Проблема решается следующим образом:
<xsl:for-each select="main/*"> <xsl:choose> <xsl:when test="name() = 'value1'"> TODO </xsl:when> <xsl:when test="name() = 'value2'"> TODO </xsl:when> </xsl:choose> </xsl:for-each> </xsl:template> --------------------
qip |
|||
|
||||
| JVM |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 30.10.2006 Репутация: 4 Всего: 5 |
То, что ты написал очень не эффективно и лучше так вообще не делать.
Если опишешь подробнее что хочешь получить можно будет дать более конкретные советы. Это сообщение отредактировал(а) JVM - 11.12.2006, 12:55 |
|||
|
||||
| Foo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 164 Регистрация: 20.10.2006 Репутация: нет Всего: 3 |
а почему мое неэффективно? помоему очень даже логично...
--------------------
qip |
|||
|
||||
| achepkunov |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 13.12.2006 Репутация: нет Всего: 1 |
"Чиста" алгоритмически потому что.
|
|||
|
||||
| JVM |
|
||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 30.10.2006 Репутация: 4 Всего: 5 |
Представь себе, что XSLT-процессор встретит очередной элемент и им будет value2. Сначало будет сделана проверка равено ли название элемента value1. Так как не равно, то будет осуществляться проверка на равенство value2. Это окажется верным и будет выполнен шаблон внутри xsl:when. Так же обрати внимание на то, что у тебя есть цикл в условии которого "main/*" - на эту проверку тоже будет тратится время. Теперь посмотрим на вариант, который предложил я. В шаблоне
Когда встретится элемент value1 вызовется шаблон
Если появится например value3 то в моем случае надо добавить для него только шаблон, а в твоем изменять логику(добавлять xsl:when), причем не лучшим способом. |
||||||||
|
|||||||||
![]()
|
| Правила форума "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. |