更新
下面介绍的过程给出了一个使用 XML DOM 对象通过 VBA 解析 XML 的示例。代码基于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 - 这个最初的答案显示了我能想象的最简单的事情(当时我正在研究一个非常具体的问题)。使用内置于 VBA XML Dom 中的 XML 工具自然会好得多。请参阅上面的更新。
原始回复
我知道这是一篇非常古老的帖子,但我想分享我对这个复杂问题的简单解决方案。我主要使用基本字符串函数来访问 xml 数据。
这假设您有一些已在 VBA 函数中返回的 xml 数据(在 temp 变量中)。有趣的是,还可以看到我如何链接到 xml Web 服务来检索值。图像中显示的函数也采用查找值,因为可以使用 = FunctionName(value1, value2) 从单元格内访问此 Excel VBA 函数,以通过 Web 服务将值返回到电子表格中。
openTag = ""
closeTag = ""
' 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)