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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Развернуть дерево в плоский список, чувствую, что элементарно... подскажите! 
V
    Опции темы
SelenIT
Дата 6.4.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



В поиске нашел только обратную задачу :(

Дан XML с рекурсивной структурой а-ля
Код

<elem id="e1">
     <elem id="e2"/>
     <elem id="e3">
          <elem id="e8"/>
     </elem>
     <elem id="e5"/>
</elem>


Нужно получить просто линейный список в порядке появления id-ов в коде, т.е.
Код

<div id="e1"></div>
<div id="e2"></div>
<div id="e3"></div>
<div id="e8"></div>
<div id="e5"></div>

Или даже вообще плевать на порядок - просто избавиться от вложенности.

После двух бессонных ночей туплю как пьяная улитка. Помогите, пожалуйста!


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Exception
Дата 7.4.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                                                xmlns="http://www.w3.org/1999/xhtml">    
<xsl:template match="//elem">
    <xsl:element name="div">
        <xsl:attribute name="id"><xsl:value-of select="@id" /></xsl:attribute>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>

PM   Вверх
SelenIT
Дата 7.4.2007, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Exception, огромное спасибо!

Правда, заработало только после добавления рекурсивного вызова <xsl:apply-templates select="./elem"/> в конец основного... но главное, что я смог понять свою глупую ошибку, над которой непростительно тупил столько дней... smile

Это сообщение отредактировал(а) SelenIT - 7.4.2007, 20:25


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Alx
Дата 14.4.2007, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

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



<xsl:apply-templates select="./elem"/>
а что это означает?

//elem
и вот это smile просто я попробывал, если, как говорит SelenIT, все получается и без // перед elem..  smile  


--------------------
PM MAIL WWW ICQ   Вверх
Exception
Дата 14.4.2007, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Alx @  14.4.2007,  17:39 Найти цитируемый пост)
./elem


То же самое, что и просто elem. То бишь, все дочерние элементы elem.


Цитата(Alx @  14.4.2007,  17:39 Найти цитируемый пост)
//elem


По идее, должно применять шаблон для всех elem в документе.
PM   Вверх
Alx
Дата 14.4.2007, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

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



Цитата(Exception @  14.4.2007,  20:19 Найти цитируемый пост)
По идее, должно применять шаблон для всех elem в документе. 

а что, если elem не для всех?..

Цитата(Alx @  14.4.2007,  16:39 Найти цитируемый пост)
просто я попробывал, если, как говорит SelenIT, все получается и без // перед elem..     




--------------------
PM MAIL WWW ICQ   Вверх
SelenIT
Дата 14.4.2007, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



По идее, "//elem" - для <elem> на любом уровне вложенности, а просто "elem" или "./elem" - только для непосредственных потомков текущего уровня. Но почему-то исходный вариант Exceptionа у меня не заработал... кстати, до сих пор не понимаю, почему, буду благодарен за окончательное внесение ясности!


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Alx
Дата 15.4.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

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



SelenIT, 
Цитата
а просто "elem" или "./elem" - только для непосредственных потомков текущего уровня

если в xslt описать xsl:template match="elem" то он применится для всех <elem> xml-документа, любой вложенности... разве не так??

и я тоже - всеьма
Цитата(SelenIT @  14.4.2007,  21:55 Найти цитируемый пост)
буду благодарен за окончательное внесение ясности! 

))


--------------------
PM MAIL WWW ICQ   Вверх
SelenIT
Дата 15.4.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Цитата(Alx @  15.4.2007,  11:16 Найти цитируемый пост)
xsl:template match="elem" то он применится для всех <elem> xml-документа, любой вложенности... разве не так??

AFAIK, не так... только для того, что видно с текущего уровня (изначально - с корня, т.е. "/"). Если, конечно, искусственно не "натравить" шаблон на другие пути с помощью xsl:apply-templates (что меня и выручило в примере...).

Кстати, один знающий человек советовал мне всячески избегать путей с "//" без крайней необходимости, т.к. это приводит к лишнему полному перебору дерева и => лишней нагрузке на проц...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Alx
Дата 15.4.2007, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

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



Цитата(SelenIT @  15.4.2007,  15:49 Найти цитируемый пост)
Если, конечно, искусственно не "натравить" шаблон на другие пути с помощью xsl:apply-templates (что меня и выручило в примере...).

а.. ну так я и делал... обычно это естественно для распечатки древа элементов..


--------------------
PM MAIL WWW ICQ   Вверх
Exception
Дата 16.4.2007, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А вот это заработает?

Код
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                                                xmlns="http://www.w3.org/1999/xhtml">    
    <xsl:template match="/">
        <xsl:apply-templates name="elem">
    </xsl:template>
    <xsl:template match="elem">
        <xsl:element name="div">
            <xsl:attribute name="id"><xsl:value-of select="@id" /></xsl:attribute>
        </xsl:element>
        <xsl:apply-templates name="../elem">
    </xsl:template>
</xsl:stylesheet>

PM   Вверх
Alx
Дата 16.4.2007, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ajaxy
****


Профиль
Группа: Комодератор
Сообщений: 2903
Регистрация: 26.11.2003
Где: Cutopia

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



Цитата

Недопустимый атрибут "name" для "xsl:apply-templates".



--------------------
PM MAIL WWW ICQ   Вверх
batigoal
Дата 16.4.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Alx, видимо, вместо name должно быть select.

Там ещё, кстати, тег не закрыт.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
SelenIT
Дата 16.4.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

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



Exception, нет, даже с поправками batigoalа с "../elem" в 11-й строке не заработало, а Altova выругалась насчёт "The XSL processor stack has overflowed - probable cause is infinite template recursion". С заменой на просто "elem" там же заработало, но ведь так работает и без отдельного вызова для "/"...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
batigoal
Дата 16.4.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Цитата(SelenIT @  16.4.2007,  14:53 Найти цитируемый пост)
С заменой на просто "elem" там же заработало

Ну да, все логично...

Цитата(SelenIT @  16.4.2007,  14:53 Найти цитируемый пост)
но ведь так работает и без отдельного вызова для "/"... 

Эта добавка позволяет отсечь все не-elem теги.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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