Boucle par le biais d'un document XML complet

Je suis à la recherche d'un moyen de faire une boucle par tous les nœuds de mon document XML.

Fichier XML de l'échantillon

<root>
<llnode created="2005-05-24T15:26:24" createdby="42912153" createdbyname="" description="" id="107810306" modified="2008-06-05T16:07:44" name="" objname="" objtype="0" ownedby="42912153" ownedbyname="" parentid="107810295" size="4">
<Nickname domain=""/>
<MajorMinorContainer>false</MajorMinorContainer>
<llnode created="2005-05-06T12:54:03" createdby="42912153" createdbyname="" description="" id="107815681" modified="2006-12-04T14:39:51" name="" objname="" objtype="0" ownedby="42912153" ownedbyname="" parentid="107810306" size="0">
<Nickname domain=""/>
<MajorMinorContainer>false</MajorMinorContainer>
</llnode>
<llnode created="2005-05-06T12:54:31" createdby="42912153" createdbyname="" description="" id="107815683" modified="2006-12-04T14:39:53" name="" objname="" objtype="0" ownedby="42912153" ownedbyname="" parentid="107810306" size="0">
<Nickname domain=""/>
<MajorMinorContainer>false</MajorMinorContainer>
</llnode>
</llnode>
<llnode created="2005-05-24T15:26:24" createdby="42912153" createdbyname="" description="" id="107810306" modified="2008-06-05T16:07:44" name="" objname="" objtype="0" ownedby="42912153" ownedbyname="" parentid="107810295" size="4">
<Nickname domain=""/>
<MajorMinorContainer>false</MajorMinorContainer>
<llnode created="2005-05-06T12:54:03" createdby="42912153" createdbyname="" description="" id="107815681" modified="2006-12-04T14:39:51" name="" objname="" objtype="0" ownedby="42912153" ownedbyname="" parentid="107810306" size="0">
<Nickname domain=""/>
<MajorMinorContainer>false</MajorMinorContainer>
</llnode>
<llnode created="2005-05-06T12:54:31" createdby="42912153" createdbyname="" description="" id="107815683" modified="2006-12-04T14:39:53" name="" objname="" objtype="0" ownedby="42912153" ownedbyname="" parentid="107810306" size="0">
<Nickname domain=""/>
<MajorMinorContainer>false</MajorMinorContainer>
</llnode>
</llnode>
</root>

Le document a toujours la même structure. Chaque llnode représente un dossier. Cela peut aller très profond (pour les fins de l'exemple ci-dessus, le champ d'application est seulement 2, mais il peut aller jusqu'à 10).

Comment puis-je faire une boucle par tous les records? Je ne veux pas mettre une boucle dans une boucle, puis une autre boucle et faire comme 20 fois pour être sûr de traiter chaque nœud. Est-il un moyen de faire une boucle de boucles?

Ci-dessous est ce que j'ai obtenu jusqu'à présent, seuls de travail pour le document XML (scope=2), il serait nécessaire d'ajouter autant de boucles que l'étendue augmente (il ne devrait pas aller au-dessus de la portée=10)

Original VBA (à partir de la question initiale)

xmlExportDoc = "myXmlDoc.xml"
Set xmlDoc = New MSXML2.DOMDocument
xmlDoc.Load (xmlExportDoc)
Set xmlNodeList = xmlDoc.SelectNodes("//llnode")
For Each Node In xmlNodeList
MsgBox "Listing the EXISTING nodes"
MsgBox Node.nodeName & " " & Node.NodeValue & " " & Node.NodeType
If Node.HasChildNodes() Then
MsgBox Node.nodeName & "has child nodes"
Set xmlNodeList2 = Node.ChildNodes
For Each Node2 In oNodeList2
MsgBox Node2.nodeName & " " & Node2.NodeValue & " " & Node2.NodeType
If Node2.HasChildNodes() Then
MsgBox Node2.nodeName & "has child nodes"
End If
Next
End If
Next

MIS À JOUR VBA

Private Function xmlParse(n As MSXML2.IXMLDOMNode)
Dim n2 As MSXML2.IXMLDOMNode
MsgBox n.nodeName & " " & n.NodeValue & " " & n.NodeType
If n.HasChildNodes() Then
MsgBox n.nodeName & " has child nodes"
For Each n2 In n.ChildNodes
xmlParse (n2)
Next
MsgBox "Done listing child nodes for " & n.nodeName
End If
End Function

Et le code de l'événement:

    Dim xmlExportDoc As String
Dim xmlDoc As MSXML2.DOMDocument
Dim xmlNodeList As MSXML2.IXMLDOMNodeList, xmlNodeList2
Dim Node As MSXML2.IXMLDOMNode
xmlExportDoc = "http://myserver.com/myDoc.xml"
Set xmlDoc = New MSXML2.DOMDocument
xmlDoc.async = False
xmlDoc.Load (xmlExportDoc)
Set xmlNodeList = xmlDoc.SelectNodes("//llnode")
For Each Node In xmlNodeList
Call xmlParse(Node)
Next

Ce ne fonctionnent toujours pas, eu une erreur lors de la récursif xmlParse() appel, car MSXML2.IXMLDOMNode.ChildNodes ne semble pas être un MSXML2.IXMLDOMNode type.

OriginalL'auteur dnLL | 2013-01-18