2 Stimmen

Werte in XML-Antwort in VBA abrufen

Ich verwende eine GET-Anforderung, 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. Dies ist die Funktion, die ich bisher in VBA habe:

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 den Verweis auf Microsoft XML V6.0.

Die XML-Antwort ist ziemlich groß, aber das 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"-Satzes und den "Rolling12MonthAvg" für den 12. Monat der letzten 5 Jahre erfassen.

Die Werte sind alle in Ordnung, daher denke ich, dass ich in der Lage sein sollte, den Startmonat (vor 60 Monaten) zu "finden" oder "gehen", indem ich die Attribute "Monat" und "Jahr" verwende, und dann den B14045-Satz in einer inkrementierenden Schleife lesen.

Aber ich kenne die Syntax nicht, um den gewünschten Knoten zu finden und dann nach vorne zu inkrementieren. Ich habe versucht, einige Hilfedateien und andere Themen zu lesen, aber ich kann einfach nicht durchblicken. Jede Hilfe wäre sehr willkommen.

1voto

ddine Punkte 31

Ich glaube, ich habe die XML-Syntax herausgefunden, indem ich 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ählen Sie alle B14045-Elemente der CANSIM-Elemente aus, die innerhalb von 5 Jahren liegen
strPath = "//CANSIM[Year>" & 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