Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Тонкость с игнорированием повторяющихся узлов в xslt

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
posdnyaa



Зарегистрирован: 28.08.2007
Сообщения: 8

СообщениеДобавлено: Сб Авг 02 2008 17:22    Заголовок сообщения: Тонкость с игнорированием повторяющихся узлов в xslt Ответить с цитатой

Столкнулся вот с какой проблемой.
Есть xml:

Код:
<root>
<Info Currency="USD" Denom="20" amount="21" />
<Info Currency="RUB" Denom="10" amount="12" />
<Info Currency="RUB" Denom="10" amount="22" />
<Info Currency="RUB" Denom="100" amount="12" />
<Info Currency="RUB" Denom="500" amount="91" />
<Info Currency="RUB" Denom="10" amount="521" />
<Info Currency="USD" Denom="100" amount="21" />
</root>

Currency-Валюта, Denom-номинал.
Хочу средствами xslt получить отсортированный по возрастанию список номиналов где Currency="RUB" и чтобы Denom не повторялся (т.е. 10 100 500).
В xslt это делается так:

Код:
<xsl:for-each select="root/Info[(not(@Denom=preceding-sibling::Info/@Denom)) and @Currency='RUB']">
<xsl:sort select="@Denom" data-type="number" order="ascending" />
<xsl:value-of select="@Denom"/> руб.<br/>
</xsl:for-each>


Однако если в первой строчке в xml заменить номинал доллара (Denom) на 10
то условие
[(not(@Denom=preceding-sibling::Info/@Denom)) and @Currency='RUB']
все равно увидит эту строчку с долларом, а т.к. там стоит 10 (а в рублях тоже есть Denom="10"), то в результате получим список для рублей не 10 100 500,
а 100 500.
10 куда то исчезает.
Подскажите пожалуйста как обойти этот баг или я что-то делаю не так
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
posdnyaa



Зарегистрирован: 28.08.2007
Сообщения: 8

СообщениеДобавлено: Сб Авг 02 2008 20:13    Заголовок сообщения: Ответить с цитатой

Решение найдено.
Изменить условие
[(not(@Denom=preceding-sibling::Info[@Currency='RUB']/@Denom)) and @Currency='RUB']
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...