Excel VBA pobierający określony węzeł z XML
Mam plik XML z API URL (URL, którego nie udostępniłem, ponieważ umożliwia dostęp do bezpiecznych informacji). Z tego pliku chcę uzyskać pewne informacje. Mój problem polega na tym, że gdy już jestem w węźle nadrzędnym (eventNode), chcę po prostu móc pobrać dane z określonych węzłów podrzędnych.
Na przykład jeśli eventNode był<event><ID>1</ID>...<title>event 1</title></event>
, jak bym dostał1
od znajomości nazwy węzłaID
(lub jakąkolwiek inną wartość, którą chcę wyciągnąć)?
Dużo przeglądałem za pośrednictwem forów i.SelectSingleNode
nie dał mi szczęścia. Również.selectNodes
nie będzie działać jak normalna lista węzłów w ciągu XML. Nie wiem, czy jest to spowodowane metodą używaną do analizowania mojego pliku XML.
Sub ListEvents()
Dim strPath As String
strPath = getAPI("GetEvents", "filter=&orderBy=")
Dim xmlDocument As MSXML2.DOMDocument60
Set xmlDocument = New DOMDocument60
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", strPath, False
.send
xmlDocument.LoadXML .responseText
End With
Dim lvl1 As IXMLDOMNode: Dim lvl2 As IXMLDOMNode
Dim eventNode As IXMLDOMNode: Dim isNode As IXMLDOMNode
For Each lvl1 In xmlDocument.ChildNodes
For Each lvl2 In lvl1.ChildNodes
For Each eventNode In lvl2.ChildNodes
If eventNode.HasChildNodes Then
'Here is where I want code to find specific child node
'without having to look at every node.
End If
Next
Next
Next
End Sub
Przykładowy XML:
<?xml version="1.0" encoding="utf-8" ?>
<ResultsOfListOfEvent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.regonline.com/api">
<Success>true</Success>
<Data>
<APIEvent>
<ID>111</ID>
<CustomerID>222</CustomerID>
<ParentID>0</ParentID>
<Status>Testing</Status>
<Title>Event Name</Title>
<ClientEventID />
<TypeID>9</TypeID>
<TimeZone>GMT</TimeZone>
<CurrencyCode>GBP</CurrencyCode>
<AddDate>2013-12-18T02:34:09.357</AddDate>
<Channel>Running</Channel>
<IsWaitlisted>false</IsWaitlisted>
</APIEvent>
<APIEvent>
<ID>112</ID>
<CustomerID>223</CustomerID>
<ParentID>0</ParentID>
<Status>Testing</Status>
<Title>Event Name</Title>
<ClientEventID />
<TypeID>9</TypeID>
<TimeZone>GMT</TimeZone>
<CurrencyCode>GBP</CurrencyCode>
<AddDate>2013-12-18T02:34:09.357</AddDate>
<Channel>Running</Channel>
<IsWaitlisted>false</IsWaitlisted>
</APIEvent>
</Data>
</ResultsOfListOfEvent>
Chcę wydrukować tekst w każdym<ID>
(to znaczy.111
i112
) i każdy<Title>
. To tylko przykład, w zależności od uruchomionego interfejsu API chcę mieć możliwość wyboru i wybierania informacji, które ściągam.