|
|
|
XSLT. Вычесть одно множество узлов из другого..
|
|||
|---|---|---|---|
|
#18+
Есть XML-файл следующего вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. В XSL-файле, который используется для обработки этого XML, необходимо составить такой XPath, который бы возвращал набор узлов из <nodes1>..</nodes1>, которых нет в <nodes2>..</nodes2> Т.е. нужно получить: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Я читал про объединение ("|"), которое соединяет два набора узлов без повторов. Его можно было бы здесь употребить, однако, как я понял, сравниваются узлы в документе, а не их текстовые значения. Естественно, в выборке я получаю дубликаты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 14:05 |
|
||
|
XSLT. Вычесть одно множество узлов из другого..
|
|||
|---|---|---|---|
|
#18+
Сравнивать надо по обоим <id>5</id> <name>name5</name> или достаточн будет по одному из них? Это на тот случай если один из них будет иметь такое же значение, а другой, отличное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 14:14 |
|
||
|
XSLT. Вычесть одно множество узлов из другого..
|
|||
|---|---|---|---|
|
#18+
Ну.. в моей задаче можно считать, что узлы считаются равными, если у них одинаковый <id>. А вообще на будущее, конечно, хотелось бы получить решение в общем - когда требуется, чтобы узлы <node> были полностью одинаковы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 14:21 |
|
||
|
XSLT. Вычесть одно множество узлов из другого..
|
|||
|---|---|---|---|
|
#18+
SuSa Вообще, Вы натолкнули меня на мысль. :) В моем случае можно сделать так: Код: plaintext Я как-то не подумал об этом. Благодарю! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 14:39 |
|
||
|
XSLT. Вычесть одно множество узлов из другого..
|
|||
|---|---|---|---|
|
#18+
Молодец Вот мое решение: <xsl:template match="//nodes2"> <xsl:choose> <xsl:when test="current()/node/id[text()]=//nodes1/node/id[text()]"> <xsl:copy-of select="current()"/> </xsl:when> </xsl:choose> </xsl:template> <xsl:template match="/"> <xsl:apply-templates select="//nodes2"/> </xsl:template> Правда оно почему то работает с точностью наоборот, никак не могу понять почему :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 14:43 |
|
||
|
XSLT. Вычесть одно множество узлов из другого..
|
|||
|---|---|---|---|
|
#18+
SuSaПравда оно почему то работает с точностью наоборот, никак не могу понять почему :) Потому что благодаря этому условию: Код: plaintext будут выводиться те узлы из <node2>..</node2>, которые есть и в <node1>..</node1>. Т.е. получается пересечение набора узлов, а мне нужна была именно разность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 14:56 |
|
||
|
XSLT. Вычесть одно множество узлов из другого..
|
|||
|---|---|---|---|
|
#18+
Нее, я это то понимаю, просто условие вида test="current()/node/id[text()] !=//nodes1/node/id[text()]"> Выдавала такой же результат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 15:04 |
|
||
|
|

start [/forum/topic.php?fid=14&msg=34374495&tid=1334417]: |
0ms |
get settings: |
6ms |
get forum list: |
23ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 464ms |

| 0 / 0 |
