powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA + XML. Структура документа.
5 сообщений из 5, страница 1 из 1
VBA + XML. Структура документа.
    #37740574
polosatyj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всех приветствую!

Есть такая задачка. Есть пусть простенький XML:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<Message>
	<Order>
		<Line>1</Line>
		<Name>Мороженое</Name>
		<QTY>10</QTY>
		<Price>23,2</Price>
	</Order>
</Message>



Нужно получить табличку примерно следующего содержания (в Excel):

Путь к полю | Значение

В данном случае это будет:
/Message/
/Message/Order/
/Message/Order/Line | 1
/Message/Order/Name | мороженое

и т.д.

Как это можно сделать проще всего? Например, через XmlNodeList, или XmlNameTable? Я недавно с XML-ками начал возиться, и у меня сейчас небольшая каша в голове. Помогите плиз.
...
Рейтинг: 0 / 0
VBA + XML. Структура документа.
    #37740640
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polosatyj,
Что-то вроде этого
Код: 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.
CONST DELIMITER="/"

private sub ReadFile(srcFile as string)
    

Dim dom As MSXML2.DOMDocument30
    Set dom = New MSXML2.DOMDocument30
    dom.load(srcFile)
    
    If dom.parseError.errorCode = 0 Then
        Set nodelist = dom.selectNodes("//")
        For Each node In nodelist

End Sub

Private Function GetNodeAdress(node As IXMLDOMNode) As String
    On Error GoTo EH
    Dim n As IXMLDOMNode
    Dim str As String
    Set n = node
    Do Until n Is Nothing
        str = DELIMITER + n.baseName + str
        Set n = n.parentNode
    Loop
    GetNodeAdress = Right(str, Len(str) - 2)
EH:
End Function
...
Рейтинг: 0 / 0
VBA + XML. Структура документа.
    #37740652
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, предыдущее сообщение раньше времени отправил)

Код: 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.
CONST DELIMITER="/"

private sub ReadFile(srcFile as string)
    Dim dom As MSXML2.DOMDocument30
    Set dom = New MSXML2.DOMDocument30

    Dim node As IXMLDOMNode
    Dim nodelist As IXMLDOMNodeList

    dom.load(srcFile)
    If dom.parseError.errorCode = 0 Then
        Set nodelist = dom.selectNodes("//")
        For Each node In nodelist
               'Тут заполняешь лист с помощью функции GetNodeList() и node.nodeTypedValue
        next node
End Sub

Private Function GetNodeAdress(node As IXMLDOMNode) As String
    On Error GoTo EH
    Dim n As IXMLDOMNode
    Dim str As String
    Set n = node
    Do Until n Is Nothing
        str = DELIMITER + n.baseName + str
        Set n = n.parentNode
    Loop
    GetNodeAdress = Right(str, Len(str) - 2)
EH:
End Function



ps Писал на скорую руку, могут быть ошибки
...
Рейтинг: 0 / 0
VBA + XML. Структура документа.
    #37740780
polosatyj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я немного не послушал. Сделал так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Set nodelist = clsXDoc.SelectNodes("/")
    
    For Each node In nodelist
        
    Do Until n Is Nothing
        str = DELIMITER + n.BaseName + str
        Set n = n.ParentNode
    Loop
    'Right(str, Len(str) - 2)
    Sheets("Sheet1").Cells(i, 1).Value = str
    i = i + 1
      
Next



Но почему-то ничего не выводится. В дебаге цикл прогоняется 0 раз ((
Где ошибся? с объявлением цикла?
...
Рейтинг: 0 / 0
VBA + XML. Структура документа.
    #37742351
Core12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего в переменную nodeList ничего не попадает
у вас
Код: vbnet
1.
Set nodelist = clsXDoc.SelectNodes("/")



надо
Код: vbnet
1.
Set nodelist = clsXDoc.SelectNodes("//")
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA + XML. Структура документа.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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