Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 куда то исчезает.
Подскажите пожалуйста как обойти этот баг или я что-то делаю не так |
|
Вернуться к началу |
|
|
posdnyaa
Зарегистрирован: 28.08.2007 Сообщения: 8
|
Добавлено: Сб Авг 02 2008 20:13 Заголовок сообщения: |
|
|
Решение найдено.
Изменить условие
[(not(@Denom=preceding-sibling::Info[@Currency='RUB']/@Denom)) and @Currency='RUB'] |
|
Вернуться к началу |
|
|
|