Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
Коллеги, приветствую! Помогите модифицировать xml. Хелп курил, не помогает. Имеются 2 xml: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Необходимо модифицировать @х нодами из @y, чтобы на выходе получился такой хмл: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Т.е., в случае, если значение тега <b> в @x и @y - совпадает, то вставляем содержимое контейнера <а> из @y в @x, но без лидирующего тега <b>. Начал так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Чего писать тут? into (...) after (...) Не могу продраться сквозь синтаксис, хоть убейся! ... Да и вставлять нужно без лидирующего <b>, поэтому t.n.query('*') - не получится. Помогите, очень нужен пример! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 16:25 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
Как всегда переврал синтаксис курсора в процессе подготовки поста, и уже не исправишь. Курсоры я писать умею, не в этом вопрос. Нужна именно модификация xml. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 16:29 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
1. Забить на курсоры. 2. Разобрать хмл в таблицы. 3. Из таблиц собрать новый хмл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 16:37 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
aleks2221. Забить на курсоры. 2. Разобрать хмл в таблицы. 3. Из таблиц собрать новый хмл. Нет, не вариант. В оригинале, хмли - не очень большие по количеству нод (сотни - тысячи), но очень вычурные по их содержимому. Тысячи тегов, переменного состава и т.д. Разбирать их - не вариант. Сервис планово-внезапно изменил представление данных, вынеся "эпизодические" данные в файл-сателлит. Чтобы не переписывать огромный кусок всего - стоит задача "эмулировать как было", с наименьшими потерями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 16:56 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
xslt- преобразования надо делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 16:58 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
uaggsterРазбирать их - не вариант.Их не надо разбирать Код: sql 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. 36. 37. 38. 39. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 17:15 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
uaggsteraleks2221. Забить на курсоры. 2. Разобрать хмл в таблицы. 3. Из таблиц собрать новый хмл. Нет, не вариант. В оригинале, хмли - не очень большие по количеству нод (сотни - тысячи), но очень вычурные по их содержимому. Тысячи тегов, переменного состава и т.д. Разбирать их - не вариант. Сервис планово-внезапно изменил представление данных, вынеся "эпизодические" данные в файл-сателлит. Чтобы не переписывать огромный кусок всего - стоит задача "эмулировать как было", с наименьшими потерями. Через курсор то не проблема. Код: sql 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. Мне казалось, есть более красивый вариант, но сейчас не смог воспроизвести. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2019, 17:24 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
Minamoto , практически то, что нужно, но порядок тегов - поменялся местами :-) И я немного не понял, что Вы делали. 1. Запросом из 2 xml определяется перечень ид, которые нужно модифицировать. Далее, в курсоре 2. Извлекаем запросом ветку с ид, равным значению из курсора. 3. Урезаем значение с лишним тегом b в @x??? (а почему в @x то, мы ж туда вставляем?). Так не пойдет, т.к. в оригинале у соответствующего тега в @x - тьма атрибутов, и b в @x и @y, скажем так, не взаимозаменяемы. Но это не принципиально, т.к., как я понимаю, можно сделать: SET @xml.modify('delete (/root/a[b/text() = sql:variable("@b")])[1]') 4. Не понятно. Вставляем вытащенную из @y ветку последней в root. Так не пойдет. А способа найти нужную ноду с соответствующим ид и вставить в нее - нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 08:34 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
invm, да, формально это то, что нужно. Только я решительно них... нихт, я хотел сказать, не понял. Сейчас попробую применить к живым данным. Кстати, а зачем там row_number() over (order by t.n) as rn? Чтобы "материализовать" with? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 08:42 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
uaggster Minamoto , практически то, что нужно, но порядок тегов - поменялся местами :-) И я немного не понял, что Вы делали. 1. Запросом из 2 xml определяется перечень ид, которые нужно модифицировать. Далее, в курсоре 2. Извлекаем запросом ветку с ид, равным значению из курсора. 3. Урезаем значение с лишним тегом b в @x??? (а почему в @x то, мы ж туда вставляем?). Так не пойдет, т.к. в оригинале у соответствующего тега в @x - тьма атрибутов, и b в @x и @y, скажем так, не взаимозаменяемы. Но это не принципиально, т.к., как я понимаю, можно сделать: SET @xml.modify('delete (/root/a[b/text() = sql:variable("@b")])[1]') 4. Не понятно. Вставляем вытащенную из @y ветку последней в root. Так не пойдет. Порядок тэгов в XML не фиксирован, как набор, возвращаемый запросом без order by ;) Можно переделать, чтобы нужный порядок был, не проблема, но вариант invm лучше, используйте его. Если не получится, тогда переделаем. 3) Насколько я понял, нужно заменить все содержимое ноды a , в которой значение b присутствует в @y . Собственно это я и делаю - грохаю полностью ноду a , и вставляю ноду a из @y с совпадающим b . Если я неправильно понял постановку - проясните, что вы имели в виду. uaggsterА способа найти нужную ноду с соответствующим ид и вставить в нее - нет? Способ можно найти, если вы опишете, какую конкретно ноду вы ищете и куда ее собираетесь вставить. Пока это абсолютно неочевидно. Ну и эти вопросы актуальны, если вам не подойдет вариант invm. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 09:59 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
uaggsterКстати, а зачем там row_number() over (order by t.n) as rn? Чтобы "материализовать" with? Да низачем. Можно даже "упростить": Код: sql 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 10:07 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
uaggsterКстати, а зачем там row_number() over (order by t.n) as rn? Чтобы "материализовать" with?Можно убрать. Это остатки экспериментов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 10:24 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
Minamoto uaggsterА способа найти нужную ноду с соответствующим ид и вставить в нее - нет? Способ можно найти, если вы опишете, какую конкретно ноду вы ищете и куда ее собираетесь вставить. Пока это абсолютно неочевидно. Ну и эти вопросы актуальны, если вам не подойдет вариант invm. Видимо, я чрезмерно упростил пример. Тогда вся предыстория. Когда-то был единый хмл-файл обмена, небольшой по объему, меньше 100Мб, но довольно вычурный по структуре. Некоторая информация в этом файле - повторялась. Т.е. он был - денормализованный. А у некоторых нод - был сокращенный, в сравнении с общим случаем, набор тегов. Сейчас (сторонние) разработчики сделали то, что грозились - вынесли часть повторяющейся информации в отдельный файл. Ну, точнее - файлы, но действия там - однотипные. В одном файле - некая уникальная (по ИД) последовательность главных нодов, в файлах - довесках - "дополнительные" довески к этим нодам, которые "расшиваются" в зависимости от, возможно повторяющихся ключей, значение которых имеется внутри этой родителькой ноды, но которые могут и не присутствовать для некоторых нод из родительского файла. Нормализовали, они, короче говоря, файл. Стоит задача - синтезировать из пары родительский файл - довесок - исходный "одиночный" файл. Т.е. взять исходный файл, и добавить в него данные довесков, ориентируясь на совпадение ключевых тегов. Т.е. если значение некого тега b, расположенного в контейнере а, совпали и в первом, и во втором файле, все теги из контейнера а второго файла должны быть добавлены в контейнер а первого файла, в идеале - в конец этого контейнера , с совпавшим ИД. Вариант invm - хорош, и вроде бы - решает проблему, однако, скорее всего, использовать я его не смогу, т.к. в реальности xml имеет заголовок и подвал, да и места, куда надо добавить значения - они тоже спрятаны в глубине иерархии, причем находятся в ней на среднем где-то уровне. Т.е. выглядит примерно как: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Вот как то так. Поэтому и родилась мысль - пройтись курсором и вставлять кусочки из второго файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 13:27 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
uaggster, тогда придется объединить оба подхода :) Заодно сделал, чтобы порядок соблюдался. Код: sql 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 13:54 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
Minamotouaggster, тогда придется объединить оба подхода :) Заодно сделал, чтобы порядок соблюдался. ЗЫ: Весь подход расчитан на то, что значение в <b> уникально внутри файла @y. Если это может быть не так - то логика ломается, и нужно будет менять логику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 13:55 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
MinamotoЗЫ: Весь подход расчитан на то, что значение в <b> уникально внутри файла @y. Если это может быть не так - то логика ломается, и нужно будет менять логику. Внутри файла @x, конечно, тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 13:56 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
MinamotoMinamotouaggster, тогда придется объединить оба подхода :) Заодно сделал, чтобы порядок соблюдался. ЗЫ: Весь подход расчитан на то, что значение в <b> уникально внутри файла @y. Если это может быть не так - то логика ломается, и нужно будет менять логику. Вот внутри @x, куда вставляют - оно не уникально, а внутри @y, откуда вставляют - гарантированно уникально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 14:45 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
uaggsterВот внутри @x, куда вставляют - оно не уникально, а внутри @y, откуда вставляют - гарантированно уникально. Шо ж из вас постановку то надо клещами вытягивать, вроде же не первый день на форуме :) Вот, вводим суррогатный ключ, чтобы не путать ноды: Уже пора под спойлер Код: sql 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. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 14:56 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
Minamoto , большое спасибо. Наверное, это оно. По моему, я даже понял решение. Воспроизвести только, в чуть отличающемся случае - не смогу. Вы какое-нибудь пособие for dummies по xQuery посоветовать не можете? Потому, что я либо не тот MSDN читаю, либо не тем способом, либо воспринимаю не тем органом, который необходим для его восприятия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 15:28 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
uaggster Minamoto , большое спасибо. Наверное, это оно. По моему, я даже понял решение. Воспроизвести только, в чуть отличающемся случае - не смогу. Вы какое-нибудь пособие for dummies по xQuery посоветовать не можете? Потому, что я либо не тот MSDN читаю, либо не тем способом, либо воспринимаю не тем органом, который необходим для его восприятия.Я вообще изучал XSLT и XPath не только относительно SQL Server, так понятнее и проще - потом уже можно применить в запросах, если понимать логику ключевых слов nodes, exist, value и остальных. Изучал последовательно здесь: http://www.xmlmaster.org/en/article/d01/index.html, собственно, для сдачи экзамена, экзамен сдал успешно ) Если с английским проблемы, то что-то полезное для общего понимания есть на Вики, тут: https://ru.wikipedia.org/wiki/XML и тут: https://ru.wikipedia.org/wiki/XPath ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 15:38 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
uaggsterВы какое-нибудь пособие for dummies по xQuery посоветовать не можете? XQuery для Sql Server имеет свою специфику, поэтому лучше сразу учить правильный вариант. Есть такая книга: XQuery language reference. Официально бесплатна. Можно скачать, например, здесь . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2019, 16:41 |
|
||
|
Помогите модифицировать xml
|
|||
|---|---|---|---|
|
#18+
petalvikuaggsterВы какое-нибудь пособие for dummies по xQuery посоветовать не можете? XQuery для Sql Server имеет свою специфику, поэтому лучше сразу учить правильный вариант. Есть такая книга: XQuery language reference. Официально бесплатна. Можно скачать, например, здесь .Полностью согласен, лучше сразу учить правильный вариант - без специфики. Тогда будет понятна общая логика, а изучить специфичные особенности тех или иных реализаций - это уже не проблема при наличии общего понимания. Начинать с конкретной реализации можно тогда, когда есть 100%-я уверенность, что никогда не придется пользоваться другими реализациями. Ну и начинать изучение лучше все же с базы - базой является XML и XML Schema. Далее, да, можно выбрать XQuery вместо XPath, т.к., из спецификации, "XQuery Version 1.0 is an extension of XPath Version 2.0." Книга вроде неплохая, но начинать сразу с нее я бы не рекомендовал, инфа там дается, как я успел увидеть, посмотрев по диагонали, с расчетом на то, что читающий владеет базовой терминологией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2019, 11:49 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39848606&tid=1687416]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
127ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 447ms |

| 0 / 0 |
