![]() |
|
Модераторы: diadiavova |
![]()
|
|
| jekacorvus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.12.2008 Репутация: нет Всего: нет |
Здравствуйте!!!
Помогите пожалуйста!!! есть вот такой код <Группа Идентификатор="ID00000002" Наименование="Гладкоствольное оружие"/> <Группа Идентификатор="ID020070" Наименование="ИМПОРТНОЕ" Родитель="ID00000002"/> <Группа Идентификатор="ID020088" Наименование="ALTAY" Родитель="ID020070"/> т.е. у Группа - есть Идентификатор и Родитель, нужно сделать вложенность <Группа Идентификатор="ID00000002" Наименование="Гладкоствольное оружие"> <Группа Идентификатор="ID020070" Наименование="ИМПОРТНОЕ" Родитель="ID00000002"> <Группа Идентификатор="ID020088" Наименование="ALTAY" Родитель="ID020070"> </Группа> </Группа> </Группа> Это сообщение отредактировал(а) jekacorvus - 28.12.2008, 15:50 |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 5 Всего: 31 |
jekacorvus, это не код. это просто три строки. припишите к ним снизу
</Группа> </Группа> </Группа> и получите то что просили. Если же это все таки код - то присыдайте XML полностью. А так же условия - на каком языке это пытаемся реализовать |
|||
|
||||
| jekacorvus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.12.2008 Репутация: нет Всего: нет |
извините вот XML,который нужно обработать с помощью XSLT здесь получается у группы и у товара указан Родитель, но они не включены друг в друга <КоммерческаяИнформация> <Каталог> <Группа Идентификатор="ID00000002" Наименование="Гладкоствольное оружие"/> <Группа Идентификатор="ID020070" Наименование="ИМПОРТНОЕ" Родитель="ID00000002"/> <Группа Идентификатор="ID020088" Наименование="ALTAY" Родитель="ID020070"/> <Товар Идентификатор="ID02_473" Наименование="ALTAY de Lux к.12х76 отборный орех 5 д/н" Родитель="ID020088" Единица="ед"> <ЗначениеСвойства Значение="ALTAY de Lux к.12х76 отборный орех 5 д/н"/> </Товар> <Товар Идентификатор="ID02_472" Наименование="ALTAY Special к.12х76 отборный орех 5 д/н" Родитель="ID020088" Единица="ед"> <ЗначениеСвойства Значение="ALTAY Special к.12х76 отборный орех 5 д/н"/> </Товар> </Каталог> </КоммерческаяИнформация> должен получить на выходе XML с нормальной вложенностью <КоммерческаяИнформация> <Каталог> <Группа Идентификатор="ID00000002" Наименование="Гладкоствольное оружие"> <Группа Идентификатор="ID020070" Наименование="ИМПОРТНОЕ" Родитель="ID00000002"> <Группа Идентификатор="ID020088" Наименование="ALTAY" Родитель="ID020070"> <Товар Идентификатор="ID02_473" Наименование="ALTAY de Lux к.12х76 отборный орех 5 д/н" Родитель="ID020088" Единица="ед"> <ЗначениеСвойства Значение="ALTAY de Lux к.12х76 отборный орех 5 д/н"/> </Товар> <Товар Идентификатор="ID02_472" Наименование="ALTAY Special к.12х76 отборный орех 5 д/н" Родитель="ID020088" Единица="ед"> <ЗначениеСвойства Значение="ALTAY Special к.12х76 отборный орех 5 д/н"/> </Товар> </Группа> </Группа> </Группа> </Каталог> </КоммерческаяИнформация> Это сообщение отредактировал(а) jekacorvus - 28.12.2008, 19:27 |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 5 Всего: 31 |
все ок
хм.. все не тривиально. Вложенность Групп произвольная ? Это сообщение отредактировал(а) sir_nuf_nuf - 28.12.2008, 18:40 |
|||
|
||||
| jekacorvus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.12.2008 Репутация: нет Всего: нет |
здесь получается у группы и у товара указан id родителя - Родитель и нужно вложить дочерние в родительские вложенность может быть любой глубины вот что я написал <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output encoding="utf-8" method="xml" indent="yes"/> <xsl:template match="/"> <xsl:apply-templates mode="line"/> </xsl:template> <xsl:template match="*" mode="line"> <xsl:variable name="nameCat" select="//Каталог/@Наименование"/> <Каталог Наименование="{$nameCat}"> <xsl:apply-templates select="//Группа" mode="item" /> </Каталог> </xsl:template> <xsl:template match="Группа" mode="item"> <Группа> <Наименование> <xsl:value-of select="@Наименование"/> </Наименование> <Идентификатор> <xsl:value-of select="@Идентификатор"/> </Идентификатор> <ИдентификаторВКаталоге> <xsl:value-of select="@ИдентификаторВКаталоге"/> </ИдентификаторВКаталоге> <Родитель> <xsl:value-of select="@Родитель"/> </Родитель> <xsl:variable name="identId" select="@Идентификатор"/> <xsl:apply-templates select="//Группа[@Родитель = $identId]" mode="item" /> </Группа> </xsl:template> </xsl:stylesheet> но здесь получается проблемка в том, что берется первый элемент, для него ищутся потомки, вставляются как надо. А потом тот же потомок получается корневым, т.е. попроще, очень много повторов. Я думал завести какой массив и загонять обработанные id элементов в массив, чтобы избавиься от повторов, а потом просто проверять на существование данного элемента в массиве и если есть, то не обрабатывать. Но не знаю можно ли такое в xslt. Или какой-нибудь другой вариант. Это сообщение отредактировал(а) jekacorvus - 28.12.2008, 22:21 |
|||
|
||||
| sir_nuf_nuf |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 5 Всего: 31 |
jekacorvus, у меня XSLT тупил с русскими именами - не стал разбираться - написал все английскими
XML:
XSLT:
результат:
Вообщем, я немного усложнил, что бы корректно работало, когда несколько групп, потом товары, потом опять несколько групп.. Группа Группа Товар Товар Группа Товар Если таого не будет использовать - то все даже проще... P.S. кстати, спасибо за хорошую задачку! |
||||||
|
|||||||
| jekacorvus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.12.2008 Репутация: нет Всего: нет |
Вообще большое пожалуйста!!!
Я и сам задолбался, пока настроил русский. А вообще, огромное человеческое спасибо!!! Чтобы был рядом, угостил бы большой шоколадкой!!! И ты угадал со структурой, оно так и есть Группа Группа Товар Товар Группа Товар СПАСИБО тебе sir_nuf_nuf Это сообщение отредактировал(а) jekacorvus - 29.12.2008, 02:59 |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 5 Всего: 31 |
не за что =)
P.S. если проблема решена - тему нужно закрыть. Поищите кнопку. особую благодарность можно выражать "+" к репутации |
|||
|
||||
| jekacorvus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.12.2008 Репутация: нет Всего: нет |
Я бы с радостью повысить репутацию, но мне написали
Обнаружена ошибка: У Вас недостаточно постов, чтобы изменять репутацию пользователей. Необходимо 100 постов. Это сообщение отредактировал(а) jekacorvus - 31.12.2008, 01:04 |
|||
|
||||
| jekacorvus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.12.2008 Репутация: нет Всего: нет |
Как оказалось, я сначало не заметил как получилось. А оказалось xml имеет немного другой вид:
Все дело в том что структура следующая Группа1 Группа2 Родитель=Группа1 Группа3 Родитель=Группа2 Товар Родитель=Группа3 Товар Родитель=Группа3 Товар Родитель=Группа3 Группа4 Родитель=Группа2 Группа5 Родитель=Группа4 Товар Родитель=Группа5 Товар Родитель=Группа5 Товар Родитель=Группа5 Группа6 Группа7 Родитель=Группа6 Группа8 Родитель=Группа7 Товар Родитель=Группа8 Товар Родитель=Группа8 Товар Родитель=Группа8 и т.д. Потому тот код xsl не совсем правильно работает |
|||
|
||||
| jekacorvus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 28.12.2008 Репутация: нет Всего: нет |
Спасибо, я уже сделал. Вот код, правда с добавками немного
Спасибо!!! |
|||
|
||||
![]()
|
| Правила форума "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. |