Обновить
Ниже приведена процедура анализа XML с помощью VBA с использованием объектов XML DOM. Код основан на руководстве для начинающих XML DOM .
Public Sub LoadDocument()
Dim xDoc As MSXML.DOMDocument
Set xDoc = New MSXML.DOMDocument
xDoc.validateOnParse = False
If xDoc.Load("C:\My Documents\sample.xml") Then
' The document loaded successfully.
' Now do something intersting.
DisplayNode xDoc.childNodes, 0
Else
' The document failed to load.
' See the previous listing for error information.
End If
End Sub
Public Sub DisplayNode(ByRef Nodes As MSXML.IXMLDOMNodeList, _
ByVal Indent As Integer)
Dim xNode As MSXML.IXMLDOMNode
Indent = Indent + 2
For Each xNode In Nodes
If xNode.nodeType = NODE_TEXT Then
Debug.Print Space$(Indent) & xNode.parentNode.nodeName & _
":" & xNode.nodeValue
End If
If xNode.hasChildNodes Then
DisplayNode xNode.childNodes, Indent
End If
Next xNode
End Sub
Nota Bene - этот первоначальный ответ показывает самое простое, что я мог себе представить (в то время Я работал над очень конкретным вопросом). Естественно, использование XML-объектов, встроенных в XML-документ VBA, было бы намного лучше. См. Обновления выше.
Original Response
Я знаю, что это очень старый пост, но я хотел поделиться своим простым решением с этим сложным вопросом. В основном я использовал основные строковые функции для доступа к данным xml.
Предполагается, что у вас есть некоторые данные xml (в переменной temp), которые были возвращены в функции VBA. Интересно, что можно также увидеть, как я связываюсь с веб-службой xml, чтобы получить значение. Функция, показанная на изображении, также принимает значение поиска, так как эту функцию Excel VBA можно получить изнутри ячейки, используя = FunctionName (value1, value2), чтобы возвращать значения через веб-службу в электронную таблицу.
[/g1]
openTag = "<" & tagValue & ">" closeTag = "< /" & tagValue & ">"
' Locate the position of the enclosing tags startPos = InStr(1, temp, openTag) endPos = InStr(1, temp, closeTag) startTagPos = InStr(startPos, temp, ">") + 1 ' Parse xml for returned value Data = Mid(temp, startTagPos, endPos - startTagPos)