Parse XML-Datei mit VBA
Ich habe eine XML-Datei mit einer Struktur ähnlich zu diesem:
<egh_eval>
<eval_set>
<eval_id>FLOAT</eval_id>
<eval_d>
<height>INT</height>
<weight>INT</weight>
</eval_d>
<eval_e>
<height>INT</height>
<weight>INT</weight>
</eval_e>
<eval_cred>
<credit>FLOAT</credit>
</eval_cred>
</eval_set>
Muss ich analysieren, die komplette Datei und legen Sie es in eine Tabelle. (Hinweis: eval_d und eval_e tatsächlich haben mehr als hundert Parametern). Ich habe versucht, mit MSXML2 aber ich stecken, wenn ich versuche, analysieren der Datei. Mithilfe der Antworten auf Wie pase XML in VBA und Analysieren von XML in VBA ich war in der Lage, es zu erhalten :
Dim fSuccess As Boolean
Dim oDoc As MSXML2.DOMDocument
Dim oRoot As MSXML2.IXMLDOMNode ' Level 0 egh_eval
Dim oChild As MSXML2.IXMLDOMNode ' Level 1 eval_set
Dim oChildren As MSXML2.IXMLDOMNode ' Level 2 eval_id, eval_d, eval_e, eval_cred
Dim domList As MSXML2.IXMLDOMNodeList
Set oDoc = New MSXML2.DOMDocument
oDoc.async = False
oDoc.validateOnParse = False
fSuccess = oDoc.Load(Application.CurrentProject.Path & "\file.xml")
Set oRoot = oDoc.documentElement
Set oChild = oRoot.childNodes(0)
Set oChildren = oChild.childNodes(0)
For i = 0 To oChild.childNodes.length - 1
For y = 0 To oChildren.childNodes.length - 1
MsgBox oChildren.nodeName & " : " & oChildren.nodeTypedValue
oChildren.childNodes.nextNode
Next
oChild.childNodes.nextNode
Next
Jedoch, anstatt mir die richtigen Werte, es gibt mir die Schwimmer in eval_id 4 mal...
Dank !
EDIT: ich bin mit Microsoft Access 2002 SP3
Welche version von MS Access sind Sie mit ( msdn.microsoft.com/en-us/library/ff823157.aspx ) ?
Ich bin mit microsoft access 2002 SP3. Ich habe versucht, die importXML-Methode, allerdings I wirklich mochte, wie es wäre, eine separate Tabelle für jeden meiner level-2-Daten. Alle Daten werden in derselben Tabelle. Auch ich habe zur Kontrolle die Namen der Spalten, in denen die Daten geht, die irgendwann in der Zukunft.
Können Sie zeigen die erwartete Ausgabe?
Ich bin mit microsoft access 2002 SP3. Ich habe versucht, die importXML-Methode, allerdings I wirklich mochte, wie es wäre, eine separate Tabelle für jeden meiner level-2-Daten. Alle Daten werden in derselben Tabelle. Auch ich habe zur Kontrolle die Namen der Spalten, in denen die Daten geht, die irgendwann in der Zukunft.
Können Sie zeigen die erwartete Ausgabe?
InformationsquelleAutor Estarius | 2012-07-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Schleife ist alles falsch. Verwenden Sie nicht eine gezählte Schleife. Es ist
For Each
denen wird genau das tun, was Sie brauchen, und es ist sehr viel besser lesbar, auch.Wenn Sie
childNodes
müssen Sie prüfen, dienodeType
Eigenschaft. Kommentare, text-Knoten und so weiter werden alle in der Liste der Kind-Knoten, nicht nur element-Knoten.Ist es wahrscheinlich eine gute Idee, sich in die Verwendung von XPath-wählen Sie Ihre Elemente. Sie tun dies mit DOM-Methoden sind fehleranfällig und umständlich. Lesen Sie auf
IXMLDOMNode::selectNodes
undIXMLDOMNode::selectSingleNode
.Auch auf eine Allgemeine Anmerkung. Diese:
ist eigentlich beides nicht nötig und eine schlechte Idee, da Sie nie scheinen, überprüfen Sie den Wert der
fSuccess
). Besser:Erstellen mehrerer subs/Funktionen hat mehrere Vorteile
nur verwenden, wenn Sie liefern ein XML-Schema definiert die Datentypen. Verwenden Sie nicht, wenn Sie kein schema. Bevor wir gehen, bitte bestätigen Sie, dass Sie nicht haben
On Error Goto 0
in Kraft.Ich glaube nicht, haben eine On Error Goto-aber... Was sollte ich verwenden, anstatt nodeTypedValue ? Weil die .Länge der code ist nicht wirklich die Informationen, die ich Suche, da es nur wieder gut ... die Länge des Wertes
Gut. - Ich würde empfehlen, mit
.text
. Die.length
ist natürlich die Anzahl der Kind-Knoten und gemeint war, um zu dienen als Platzhalter für was auch immer du wirklich machen wollte. Es ist eine gute Idee, legen Sie einen Haltepunkt im code und durch den Schritt Zeile für Zeile im debugger. Überprüfen Sie alle Objekte, Ihre Eigenschaften, und so weiter. Auch, Sie haben eingeschaltet, um die XPath-oder sind Sie immer noch das hantieren mitchildNodes
?Ich bin immer noch mit den childNodes, wenn man bedenkt es gibt Hunderte von Parametern und XPath zu verlangen scheint mir zu geben jedes Attribut... Es wäre toll, um den realen Tisch, aber sehr schwer zu bekommen einfach alle Daten von der XML-Datei in eine Tabelle
InformationsquelleAutor Tomalak