Excel VBA obteniendo nodo específico de XML
Tengo un archivo XML de una API de URL (la URL que no he compartido, ya que permite el acceso a información segura). De este archivo quiero sacar cierta información. Mi problema es que, una vez que estoy en el nodo primario (eventNode) quiero simplemente poder obtener los datos de nodos secundarios específicos.
Por ejemplo, si eventNode era<event><ID>1</ID>...<title>event 1</title></event>
como me va a llegar1
de solo saber que el nombre del nodo esID
(o cualquier otro valor que quiero sacar)?
He mirado mucho a través de foros y.SelectSingleNode
no me ha dado suerte también.selectNodes
no actuará como una lista normal de nodos en una cadena XML. No sé si esto se debe al método que estoy usando para analizar mi archivo 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
Muestra 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>
Quiero dar salida al texto en cada<ID>
(es decir.111
y112
) y cada<Title>
. Este es solo un ejemplo, dependiendo de la API que ejecute, desearé poder elegir y elegir qué información obtengo.