如何在VBA Excel 2003中解析XML?

时间:2011-05-15 17:29:57

标签: xml excel vba

我试图通过VBA解析一般的XML文件。我想用它做什么:提取xml节点的值,将它们写入XML文件并导出。

您是否知道任何实际上允许我一次读取一个节点的库,让我使用可理解的文档和一些示例进行处理,甚至是最小的。

到目前为止:

Sub Go()

    Dim xmlDoc As MSXML2.DOMDocument
    Dim xmlElement As MSXML2.IXMLDOMElement
    Dim xmlNode As MSXML2.IXMLDOMElement

    Set xmlDoc = New MSXML2.DOMDocument
    xmlDoc.Load ("E:\cdCatalog.xml")

    Set xmlElement = xmlDoc.documentElement
    Set xmlNode = xmlElement.FirstChild

    parseNodes xmlElement, 1, 1
    'parseNodes xmlNode, 1, 1

End Sub

Sub parseNodes(node As MSXML2.IXMLDOMElement, i As Integer, j As Integer)
    Dim child As MSXML2.IXMLDOMNode

    'result = node.baseName & " : " & node.Text
    result = node.nodeName

    Sheet1.Activate
    ' text if...
    Cells(i, j) = result

    j = j + 1
    If (node.hasChildNodes) Then

        For Each child In node.childNodes
            i = i + 1
            'MsgBox child.Text
            MsgBox TypeName(node.childNodes)
            parseNodes child, i, j
        Next
    End If

End Sub

1 个答案:

答案 0 :(得分:4)

按照评论中的说明处理您更新的问题:

使用Dim语句中的参数,您不能在VBA中实例化对象。尝试:

Dim gReader As XmlTextReader
gReader = New XmlTextReader

另外,我建议您阅读XmlTextReader文档:

http://msdn.microsoft.com/en-us/library/1af7xa52.aspx

这些示例说明了如何使用XmlTextReader

编辑:据我粗略的互联网搜索可以看出,XmlTextReader是针对.NET实现的,而不是针对VBA实现的。

您可能需要考虑使用DOM而不是XmlTextReader。我发现DOM相对容易使用。缺点是它对于非常大的XML文件来说效率低下。除非您正在操作大文件,否则DOM应该可以正常工作。

Dim xlmDoc As Object
Set xlmDoc = CreateObject("Msxml2.DOMDocument.6.0")
xmlDoc.Load fileName