2 Stimmen

Werte aus XML-Antwort in VBA abrufen

Ich verwende eine GET-Anfrage, um eine XML-Antwort von einem Webdienst zu erhalten. Ich versuche, die Antwort zu analysieren und einen Teil davon in einem VBA-Formular anzuzeigen. Die VBA-Komponenten habe ich im Griff, aber die XML-Syntax bereitet mir einige Probleme. Bisher habe ich folgendes in VBA:

Sub GetCANSIM()
Dim XMLRequest As New XMLHTTP
Dim objXML As MSXML2.DOMDocument
Dim point As IXMLDOMNode
Dim value As Variant
Dim lngYear As Long

Set objXML = New MSXML2.DOMDocument

XMLRequest.Open "GET", "someURL", False
XMLRequest.send

While XMLRequest.Status <> 200
    DoEvents
Wend

If Not objXML.LoadXML(XMLRequest.responseText) Then
    Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason
End If

End Sub

Ich verwende das Microsoft XML V6.0-Referenz.

Die XML-Antwort ist ziemlich groß, aber dies ist ihr Format:

462
2006-06-01T00:00:00-04:00
2006
6
0.0469
0.0518
0.0581
0.0458
0.0467
0.019
0.0318
0.026425
0.0328

4632006-07-01T00:00:00-04:0020067
0.0446  
0.0496
0.056
0.0431
0.0445
0.018
0.0318
0.027216666667
0.0328

Ich möchte die letzten 60 Monate des "B14045"-Wertes und das "Rolling12MonthAvg" für den 12. Monat der letzten 5 Jahre abrufen.

Die Werte sind alle in Reihenfolge, daher denke ich, dass ich den Startmonat (vor 60 Monaten) finden oder anspringen kann, indem ich die "Month" und "Year"-Attribute verwende und dann den B14045-Wert in einer inkrementellen Schleife lese.

Aber ich kenne die Syntax nicht zum Finden des gewünschten Knotens (?) und dann zum Inkrementieren nach vorne. Ich habe versucht, einige Hilfe-Dateien und andere Themen zu lesen, aber ich kann einfach nicht dahinterkommen. Jede Hilfe wäre sehr geschätzt.

1voto

ddine Punkte 31

Ich glaube, ich habe die XML-Syntax herausgefunden, indem ich folgendes verwendet habe: http://www.w3schools.com/xpath/xpath_examples.asp

Sub GetCANSIM()
Dim XMLRequest As New XMLHTTP
Dim objXML As MSXML2.DOMDocument
Dim objNodeList As IXMLDOMNodeList
Dim objNode As IXMLDOMNode
Dim objElement As IXMLDOMElement
Dim strPath As String
Dim lngYear As Long

Set objXML = New MSXML2.DOMDocument

XMLRequest.Open "GET", "someURL",False
XMLRequest.send

While XMLRequest.Status <> 200
    DoEvents
Wend

If Not objXML.LoadXML(XMLRequest.responseText) Then
    Err.Raise objXML.parseError.ErrorCode, , objXML.parseError.reason
End If

objXML.setProperty "SelectionLanguage", "XPath"

lngYear = year(Now()) - 8

'Wähle alle B14045-Elemente der CANSIM-Elemente aus, die innerhalb von 5 Jahren liegen
strPath = "//CANSIM[Jahr>" & lngYear & "]/B14045"

Set objNodeList = objXML.DocumentElement.SelectNodes(strPath)

End Sub

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X