|
Тонкость с игнорированием повторяющихся узлов в 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: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
2ms |
others: | 319ms |
total: | 461ms |
0 / 0 |