powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как загрузить в Access многоуровневый файл XML?
18 сообщений из 18, страница 1 из 1
Как загрузить в Access многоуровневый файл XML?
    #37956242
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Только закончил петь торжественные оды во имя славного Rivkin Dmitry , помогшего одолеть TXT файл, как новая беда нагрянула. Теперь надо загрузить в Access XML файл, да не простой, а многоуровневый.
Полазил по сему форуму, нашел много интересного, в том числе и по своей теме.
Остановился на варианте, предложенным уважаемым ?...? ( 8786754 ), да вот незадача, в данном примере рассмотрен случай с более простым документом. Достал бубен, пару дней колдовал над этим файлом, да так ничего и не вышло.
Так вот уважаемые форумчане, прошу Вашей помощи. Подскажите пожалуйста, как написать процедуру по загрузке файла XML.
P/S Вы уж сильно не пинайте, если что. Не грамотен я в этой области.
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #37956624
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Колдую" над файлом и понимаю, что в нормальный формат его не преобразовать. А можно ли сделать хотя бы такого вида как на прилагаемом файле?
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #37956738
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Форумчане, ОЧЕНЬ нужна помощь. Если есть конкретные предложения, пишите, (адрес в личке) обсудим сумму вознаграждения и условия оплаты.
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #37956754
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шаман,

смотри в поиске по форуму MSXML2.DOMDocument

если несправишся - посмотрю через пару ч.
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #37956785
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112Шаман,

смотри в поиске по форуму MSXML2.DOMDocument

если несправишся - посмотрю через пару ч.

Спасибо за наводку, но за два дня, большую часть из итого материала я уже просмотрел. Вся проблема в том, что с циклами я "не дружу", а посему и приходится "бубном" пользоваться.
qwerty112 у меня к Вам ОГРОМНАЯ ПРОСЬБА, помочь в этом вопросе. Предложение указанное выше остается в силе.
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #37956815
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
процедура haba в Module2
"в кнопку", уже сам сделаеш
Код: vbnet
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.
Sub haba()
On Error GoTo ErrExit
    Dim rs As Object 'DAO.Recordset
    Dim xmlDoc As Object 'MSXML2.DOMDocument
    Dim xmlNode As Object 'MSXML2.IXMLDOMNode
    Dim xmlNode1 As Object 'MSXML2.IXMLDOMNode
    Dim xmlAttribut As Object 'MSXML2.IXMLDOMAttribute
    Dim xmlNodeList As Object 'MSXML2.IXMLDOMNodeList
    Dim xml_path As String
    Dim FileName As String
    Dim NameOrg, INN, KPP
    '
    Set rs = CurrentDb.OpenRecordset("select * from Tab where 1=0")
    '
    Set xmlDoc = CreateObject("MSXML2.DOMDocument")
    xmlDoc.async = False
    FileName = CurrentProject.path & "\Oborot.xml"
    If Not xmlDoc.Load(FileName) Then Exit Sub
    '
    xml_path = "/Файл/Документ/Оборот/СведПроизвИмпорт"
    Set xmlNodeList = xmlDoc.documentElement.selectNodes(xml_path)
    For Each xmlNode In xmlNodeList
        For Each xmlAttribut In xmlNode.Attributes
            Select Case xmlAttribut.Name
                Case "NameOrg": NameOrg = xmlAttribut.Value
                Case "INN": INN = xmlAttribut.Value
                Case "KPP": KPP = xmlAttribut.Value
            End Select
        Next
        '
        For Each xmlNode1 In xmlNode.childNodes
            rs.AddNew
            rs.Fields("_NameOrg") = NameOrg
            rs.Fields("_INN") = INN
            rs.Fields("_KPP") = KPP
On Error Resume Next
            For Each xmlAttribut In xmlNode1.Attributes
'                If xmlAttribut.Name Like "П*" Then  ' ???
                    rs.Fields("_" & xmlAttribut.Name) = xmlAttribut.Value
'                End If
            Next
On Error GoTo ErrExit
            rs.Update
        Next
    Next
    rs.Close
    MsgBox "Done!", vbInformation
    DoCmd.OpenTable "Tab"
FreeExit:
On Error Resume Next
    Set rs = Nothing
    Set xmlDoc = Nothing
    Exit Sub
ErrExit:
    MsgBox Err.Description, vbCritical
    Resume FreeExit
End Sub


_NameOrgКонкорд Майкопский пивоваренный завод ООООАО Ставропольский пивоваренный заводООО Первый Волжский вино-водочный комбинат ООО Рудо-Аква ф-л Лакинский пивзаводООО АГАТ ликеро-водочный завод ООО Ликеро-водочный завод ОшаООО Тихорецкий пивоваренный заводООО Югпиво

хорошо устроился ))
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #37956833
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112, ПРОСТО СУПЕР!!! Респетише тебе.
Один маленький нюанс. Как добавить Код - первый столбец.
И еще, скинь свои координаты на мой маил, действительно, от души хочу отблагодарить.
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #37956834
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шаманqwerty112, ПРОСТО СУПЕР!!! Респетише тебе.
Один маленький нюанс. Как добавить Код - первый столбец.

да, тоже заметил

вот добавь выделенное
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    Dim NameOrg, INN, KPP, П000000000003
...
    For Each xmlNode In xmlNodeList
        П000000000003 = xmlNode.parentNode.Attributes(1).nodeValue
        For Each xmlAttribut In xmlNode.Attributes
            Select Case xmlAttribut.Name
                Case "NameOrg": NameOrg = xmlAttribut.Value
                Case "INN": INN = xmlAttribut.Value
                Case "KPP": KPP = xmlAttribut.Value
            End Select
        Next
        '
        For Each xmlNode1 In xmlNode.childNodes
            rs.AddNew
            rs.Fields("_П000000000003") = П000000000003
            rs.Fields("_NameOrg") = NameOrg
            rs.Fields("_INN") = INN



ШаманИ еще, скинь свои координаты на мой маил, действительно, от души хочу отблагодарить.
таа, "непереймайся" :))
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #37956848
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112,
Даже нет слов чтобы выразить благодарность. Снимаю шляпу. Успехов в жизни тебе ДРУЖИЩЕ.
Еще раз СПАСИБО!!!
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #38084313
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток. Позволю себе продолжить тему, закрытую 3 месяца назад.
Благодаря помощи форума и в частности уважаемого qwerty112 , удалось решить неприступную для меня задачу по импорту XML файла (Видит Бог, чуть ли не каждый день вспоминаю его добрым словом).
Но я, к своему сожалению за все это время, так и не "подружился" с циклами. Поэтому опять, после бесконечных танцев с "бубном", взываю к помощи.
Суть вопроса практически тоже самое, что и в заголовке топика. Различие только в файле XML.
Насколько смог, постарался решить проблему самостоятельно, но видимо не дорос еще до нужного уровня. Все подробности в прилагаемом файле. Вкратце могу только пояснить, что загрузка почти работает, но не отображаются ключевые данные. Либо на оборот - отображаются эти недостающие данные, но при этом пропадают остальные сведения. Как объединить все это в единое целое - для меня "полный ступор". Надеюсь, что для "посвященных" людей эта задача не составит большого труда.

p.s. заметил на форуме присутствие qwerty112 )))
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #38084737
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ШаманВкратце могу только пояснить, что загрузка почти работает, но не отображаются ключевые данные. Либо на оборот - отображаются эти недостающие данные, но при этом пропадают остальные сведения. Как объединить все это в единое целое - для меня "полный ступор". Надеюсь, что для "посвященных" людей эта задача не составит большого труда.

значит, смотри,
самое простое в таком случае (загрузки в плоскую таблицу) - начинать с самого "нижнего" уровня
т.е. - через xml_path - задать самый "длинный" путь, и в цикле, выбрать всё нужное с него, после этого - "поднятся" на уровень выше (к "родительской" ноде) - Set xmlNode2 = xmlNode.parentNode
выбрать всё что нужно в ней, если нужно - "поднятся" ещё на уровень выше и т.д. вплоть до самого рута
в итоге будет что-то типа такого
Код: vbnet
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.
    xml_path = "/Файл/Документ/ОбъемОборота/Оборот/СведПроизвИмпорт/Движение"
    Set xmlNodeList = xmlDoc.documentElement.selectNodes(xml_path)
On Error Resume Next
    For Each xmlNode In xmlNodeList
        rs.AddNew
        ' Движение
        For Each xmlAttribut In xmlNode.Attributes
            rs.Fields("_" & xmlAttribut.Name) = xmlAttribut.Value
        Next
        ' СведПроизвИмпорт
        Set xmlNode2 = xmlNode.parentNode
        For Each xmlAttribut In xmlNode2.Attributes
            rs.Fields("_" & xmlAttribut.Name) = xmlAttribut.Value
        Next
        ' Оборот
        Set xmlNode2 = xmlNode2.parentNode
        For Each xmlAttribut In xmlNode2.Attributes
            rs.Fields("_" & xmlAttribut.Name) = xmlAttribut.Value
        Next
        ' ОбъемОборота
        Set xmlNode2 = xmlNode2.parentNode
        For Each xmlAttribut In xmlNode2.Attributes
            rs.Fields("_" & xmlAttribut.Name) = xmlAttribut.Value
        Next
        rs.Update
    Next



правда, есть один ньюанс
данные, на этом "нижнем" уровне - должны быть
вот в твоём файле, есть часть, когда это не соблюдается
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 <Поставщики ИдПостав="7" П000000000007="ООО "Дарлинг"">
 <Лицензии>
  <Лицензия ИдЛицензии="4" П000000000011="А,647571" П000000000012="06.06.2011" П000000000013="30.04.2012" П000000000014="Федеральная служба по регулированию алкогольного рынка" /> 
  </Лицензии>
 <Лицензии>
  <Лицензия ИдЛицензии="5" П000000000011="А,604419" П000000000012="02.05.2012" П000000000013="30.04.2017" П000000000014="Федеральная служба по регулированию алкогольного рынка" /> 
  </Лицензии>
  <ЮЛ П000000000009="2312079137" П000000000010="231201001" /> 
  </Поставщики>
 <Поставщики ИдПостав="17" П000000000007="Алина ПО ООО">
  <ЮЛ П000000000009="5433162593" П000000000010="543301001" /> 
  </Поставщики>

вот тут - "Лицензии" - просто не задан
в таком случае, имхо, самое правильное, - "забить" на одну "плоскую" таблицу и формировать 2-е нормализованных, - так как они в файле и заданны (2-е таб. Поставщики и Лицензии связанные 1:М)
типа такого
Код: vbnet
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.
    xml_path = "/Файл/Справочники/Поставщики"
    
    Set xmlNodeList = xmlDoc.documentElement.selectNodes(xml_path)
    For Each xmlNode In xmlNodeList
        rs.AddNew
        ' Заполняем всё из тега "Поставщики"
        For Each xmlAttribut In xmlNode.Attributes
            rs.Fields("_" & xmlAttribut.Name) = xmlAttribut.Value
        Next
        ' Теперь цикл по потомках тега "Поставщики"
        For Each xmlNode1 In xmlNode.childNodes
            If xmlNode1.nodeName = "ЮЛ" Then  ' - тег "ЮЛ" - в rs
                For Each xmlAttribut In xmlNode1.Attributes
                    rs.Fields("_" & xmlAttribut.Name) = xmlAttribut.Value
                Next
            End If
            If xmlNode1.nodeName = "Лицензии" Then  ' - тег "Лицензии" - в rs1
                ' цикл по тегам
                For Each xmlNode2 In xmlNode1.childNodes
                    rs1.AddNew
                    For Each xmlAttribut In xmlNode2.Attributes
                        rs1.Fields("_" & xmlAttribut.Name) = xmlAttribut.Value
                    Next
                    rs1.Fields("_ИДПостав") = rs.Fields("_ИДПостав")
                    rs1.Update
                Next
            End If
        Next
        rs.Update
    Next

...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #38084774
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112- "поднятся" на уровень выше (к "родительской" ноде) - Set xmlNode2 = xmlNode.parentNode
выбрать всё что нужно в ней, ...
или перейти к другой ноде на этом же уровне
Set xmlNode2 = xmlNode.nextSibling
Set xmlNode2 = xmlNode.previousSibling

вот тут, есть "годное" описание по MSXML2.DOMDocument
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #38085590
Шаман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый qwerty112 ОГРОМНОЕ ВАМ СПАСИБО!!!!!!!!!!
Благодаря таким людям как Вы, в нашем мире остается доброта и взаимовыручка. (на Вы - это потому, что уважаю)
Отдельное спасибо за ликбез по работе с циклами. Очень полезная информация. И главное, после Ваших комментариев и примеров, я понял куда надо было "копать".
Еще раз, от всей души благодарю за помощь. Желаю удачи по жизни и главное здоровья!!!!!!

P.S. На мой взгляд, данный форум является самым лучшим источником информации и "палочкой-выручалочкой" по Access.
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #38086708
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шаман...
P.S. На мой взгляд, данный форум является самым лучшим источником информации и "палочкой-выручалочкой" по Access.

Конечно. Здесь все. Никита, Стас, Гена, Турбо и Дюша Метелкин
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как загрузить в Access многоуровневый файл XML?
    #38883374
Elenaspb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый qwerty112, помогите!!!! SOS!!! У меня та же ситуация что у Шамана. Есть рабочая база Access с множеством данных, связанных таблиц, форм, запросов и отчетов, а так же есть вэб сайт, который предоставляет экспорт данных только в формате .XML. Нужно каким либо образом преобразовывать .XML в .mdb. Эти файлы нужно будет экспортировать постоянно. Вобщем задача сложная, по крайней мере для меня. Если для Вас это возможно, я бы объяснила подробнее в личке или по телефону. Вознаграждение гарантирую. Вот файлик XML.
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #38883404
1956
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elenaspb,

Ваш файл, Эксель нормально открывает. Можно вот так, через конвертацию в Эксель-файл и загружать.
...
Рейтинг: 0 / 0
Как загрузить в Access многоуровневый файл XML?
    #38883509
Elenaspb,

получилось?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как загрузить в Access многоуровневый файл XML?
    #39720193
Доброй ночи,у меня приблизитено такая же проблема!только я имею 20 000 файлов xml и нужно загрузить данные в табличный вид,решили что в ассеss,чтобы потом создавать запросы и анализировать инфу!но как можно все файлы сразу загрузитьи как сделать так чтобы данные в таблицах были связаны?xml с разной структурой,но не сильно, данные по физикам и по юрикам!
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как загрузить в Access многоуровневый файл XML?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]