Как разобрать XML в VBA Excel 2003? - PullRequest
2 голосов
/ 15 мая 2011

Я пытаюсь проанализировать общий XML-файл через VBA. Что я хочу с ним сделать: извлечь значения узлов 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 Ответ

4 голосов
/ 16 мая 2011

Обращаясь к вашему обновленному вопросу, как указано в вашем комментарии:

Вы не можете копировать объекты в VBA как этот, с аргументом в операторе Dim.Попробуйте:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...