|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Добрый день, Коллеги! Есть экспортированные данные в виде 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. 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.
Это древовидный список изделий и их комплектующих. В базе данных связь «один-ко-многим». Файл этот необходимо преобразовать для дальнейшего использования. Связи между изделиями и комплектующими задаются тегами <relation> и <occurrence>. В <occurrence> задаётся ссылка на параметры дочернего объекта, а <relation> указывает на «коды» дочернего и родительского объектов. Немного запутано, но не смертельно =) С XSL ранее не работал и понятия не имел, что это за зверь такой, однако получилось создать вот такой шаблон: Код: 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. 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.
В результате получается XML: Результат получает некорректный т.к. в <Part> с <importID>=form_1 не должно быть тегов <ParentID> и <ChildID>. Корректный результат будет выглядеть так: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Архив с файлами во вложении. Как это сделать не понимаю. Помогите, пожалуйста! =) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 11:43 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Oleg071984Результат получает некорректный т.к. в <Part> с <importID>=form_1 не должно быть тегов <ParentID> и <ChildID>.Их и нет. Они появляются от form_2 Чего вы хотели добиться этим кодом? Oleg071984 Код: xml 1. 2. 3. 4.
Потому, что по факту получается вот это Код: 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. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
Ну и вот это Oleg071984 Код: xml 1.
проще записывать так Код: xml 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 15:06 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
_Vasilisk_, Опыта работы с XSL - 1 день, поэтому могут быть ошибки. Мне необходимо из form2 и form3 перекинуть тег "Идентификатор родительского объекта" в form4 и form5. Никак не могу понять как это сделать. Получается только все запихнуть в form1. Другими словами, form1 состоит из form4 и form5, а связь установлена form1.VART_ID > form4(5).Идентификатор родительского объекта. Как этого добиться в коде? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 15:35 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Я так до конца и не понял задачу Есть набор узлов art Oleg071984 Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9.
которые описывают связи между объектам. Элемент art/relation указывает на основной объект. Элементы art/occurence/relation на дочерние. Запись Oleg071984 Код: xml 1.
обозначает, что нужно найти элемент с именем elementtype="form" и id =ref="form_4" Если все так, то тогда вопрос какие поля нужно достать из главного элемента, а какие из дочерних? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2019, 16:19 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
_Vasilisk_, Да верно. Вот что должно получиться в итоге. Названия полей файла-источника я закомментил Код: 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. 25. 26.
Во вложении скрин из программы, в которой используются эти данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 09:53 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Oleg071984Вот что должно получиться в итоге.Ответа на вопрос_Vasilisk_какие поля нужно достать из главного элемента, а какие из дочерних?я так и не увидел ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 14:44 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Поля, которые достаются из главного элемента: 1. "VART_ID" 2. "ART_ID" 3. "Идентификатор версии объекта" 4. "Наименование" Поля, которые нужно достать из дочерних элементов: 1. "VART_ID" 2. "ART_ID" 3. "Идентификатор версии объекта" 4. "Наименование" 5. "Идентификатор родительского объекта" Я в прошлом посте написал комменты в коде. Oleg071984Вот что должно получиться в итоге. Названия полей файла-источника я закомментил ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 15:04 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Oleg071984, И для каждого объекта нужен свой <Part>? Или один <Part> на всю группу? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 15:33 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
_Vasilisk_, Да, совершенно верно. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 15:40 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
_Vasilisk_, Да. Для каждого объекта нужен свой <Part>. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 15:42 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Oleg071984Да, совершенно верно.Что из этого_Vasilisk_для каждого объекта нужен свой <Part>? Или один <Part> на всю группу?верно? Это два противоречащих друг-другу утверждений ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 15:43 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Oleg071984_Vasilisk_, Да. Для каждого объекта нужен свой <Part>. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 15:46 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Код: 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. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2019, 16:56 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
_Vasilisk_, приветствую! Попробовал сделать конвертацию на сайте https://www.freeformatter.com/xsl-transformer.html. Результат вот такой: Код: 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. 25. 26. 27. 28. 29.
Почему то ParentID нет в form_4 и form_5. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 08:47 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Oleg071984Почему то ParentID нет в form_4 и form_5.Oleg071984 Код: 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. 25.
Где здесь атрибут Oleg071984 Код: xml 1.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 13:58 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
_Vasilisk_, Он здесь должен появиться после преобразования. Я же писал в комментариях. Берутся эти параметры из form_2 и form_3 Oleg071984 Код: xml 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 15:04 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Покажите, где здесь Oleg071984 Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
атрибутOleg071984 Код: xml 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 15:07 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
_Vasilisk_, В этом фрагменте нет. И...? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 15:16 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Oleg071984В этом фрагменте нет. И...?Если в form_4 нет атрибута 'Идентификатор родительского объекта' то тогда откуда ему взяться в выходном файле? Если значение элемента ParentID должно браться именно из этого атрибута? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 15:33 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
_Vasilisk_, Я думаю, что его можно взять из: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 15:49 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Oleg071984Я думаюВы можете много чего думать. Я мысли читать не умею Oleg071984его можно взять из:Из какого из восьми атрибутов. Если хотите нужный результат - внятно сформулируйте требования. И постарайтесь их не менять ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 16:03 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
_Vasilisk_, Согласен, могу. Так вот чтобы исключить возможное непонимание я специально привёл конечный результат XML с комментариями. И потом ещё обсудил какие поля откуда брать. Предлагаю конструктивно подойти к вопросу. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 16:12 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Oleg071984я специально привёл конечный результат XML с комментариямиМой код ему полностью соответствует ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 16:44 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
_Vasilisk_, В приведённом мной конечном результате: 1. Значения полей parentID взяты из form2 и form3 и добавлены в form4 и form5 в соответствии с заданным relation и occurence. 2. Form2 и Form3 отсутствуют. Результат работы Вашего кода не решает проблему. Вот зачем спорить? Я уверен, что с Вашими навыками в XSL изменения внести 10 минут времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 17:47 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Oleg071984Я уверен, что с Вашими навыками в XSL изменения внести 10 минут времени.Да. Если я пойму, что вам нужно. Сейчас я не понимаю. Вообще Oleg0719842. Form2 и Form3 отсутствуют.Почему они должны отсутствовать? Oleg071984 Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9.
Oleg071984Для каждого объекта нужен свой <Part>. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 14:45 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Ок. Чуть позже. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 16:15 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
Благодарю за понимание. Сегодня чуть позже все подробно объясню. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 16:31 |
|
XSLT. Преобразование XML-XML с учетом отношения один-ко-многим.
|
|||
---|---|---|---|
#18+
_Vasilisk_, _Vasilisk_, _Vasilisk_Да. Если я пойму, что вам нужно. Сейчас я не понимаю. Вообще Ок. Не вопрос. Смотрим на xml-источник. Структура не логичная, но в ней можно разобраться. В нашем конкретном случае в теге <art> содержится структура изделия "Комплекс 1". 1. Принцип построения иерархии: "Комплекс 1" состоит из "Запчасть 1" и "Запчасть 2", т.е. является им родительским объектом. Справедливо и обратное - "Запчасть 1" и "Запчасть 2" входят в "Комплекс 1", т.е. являются дочерними объектами. 2. Первый элемент <relation>. Первый элемент - Код: xml 1.
задает ссылку на технические параметры главного элемента "Комплекс 1", а именно: Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9.
Дальше все интересней. 3. Элемент <occurrence>. Служит для хранения ссылки @ref на элементы <item>, которые в свою очередь содержат ссылки на технические параметры "Запчасти 1" и "Запчасти 2", а именно <form_4> и <form_5>. 4. Элемент <occurrence>/<relation> Хранит ссылки на form_2 и form_3. Эти элементы хранят информацию о связях. У каждого элемента иерархии есть тег <VART_ID>, который является уникальным ключом. В <form_2> и <form_3> есть параметр: Код: xml 1.
@value которого совпадает с <VART_ID> родительского элемента. Т.е. <VART_ID> "Комплекс_1" будет равен formattribute[@name='Идентификатор родительского объекта']/@value" у <form_2> и <form_3>. 5. Итог <form_2> и <form_3> хранят информацию о связях элементов в сборке, поэтому они нам нужны только когда будет работать XSL. В итоговом XML они не нужны. Мы просто берем файл-источник и преобразовываем его структуру в логичную и понятную. В примере итогового 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. 25. 26.
те же самые данные но в более понятном виде. Смотрим на Part/ImportID=form_1. VART_ID= 102532 . Он будет равен <ParentID> для Part/ImportID=form_4 и Part/ImportID=form_5. Просто и понятно. 6. Для чего все это? ERP-система, в которую мне необходимо залить данные, не понимает мудреный формат исходного XML. Надеюсь, что понятно рассказал =) Жду вопросов! Можно вот сюда: oleg071984@gmail.com. В этом случае я смогу отвечать сразу же. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2019, 22:20 |
|
|
start [/forum/topic.php?all=1&fid=14&tid=1331930]: |
0ms |
get settings: |
4ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
76ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
469ms |
get tp. blocked users: |
0ms |
others: | 303ms |
total: | 863ms |
0 / 0 |