|
|
|
Тонкость с игнорированием повторяющихся узлов в xslt
|
|||
|---|---|---|---|
|
#18+
Столкнулся вот с какой проблемой. Есть 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 куда то исчезает. Подскажите пожалуйста как обойти этот баг или я что-то делаю не так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2008, 18:52 |
|
||
|
Тонкость с игнорированием повторяющихся узлов в xslt
|
|||
|---|---|---|---|
|
#18+
Решение найдено. Изменить условие [(not(@Denom=preceding-sibling::Info[@Currency='RUB']/@Denom)) and @Currency='RUB'] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2008, 21:13 |
|
||
|
Тонкость с игнорированием повторяющихся узлов в xslt
|
|||
|---|---|---|---|
|
#18+
как вариант - можно через ключ: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2008, 09:29 |
|
||
|
|

start [/forum/topic.php?fid=14&fpage=50&tid=1333823]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 155ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...