Lire un fichier xml à partir d'un controle treeview.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 931 fois - Téléchargée 41 fois

Contenu du snippet

L'objectif de ce code est d'afficher le contenu d'un fichier XML de façon hierarchique dans un contrôle Treeview.

Pour effectuer cette opération, on utilise le fichier MSXML.DLL Version 2.0 (installé par défaut avec IE5).

Le code n'est pas compliqué, et permet d'exploiter visuellement le contenu de n'importe quel fichier XML (sans DTD ni XSL).

Source / Exemple :


Option Explicit

Private Sub Form_Load()
    'Chargement du fichier XML
    Dim sFile As String
    sFile = App.Path
    If Right(sFile, 1) <> "\" Then sFile = sFile & "\"
    sFile = sFile & "profils.xml"
    XMLOnTreeView TreeView1, sFile
End Sub

Public Function XMLOnTreeView(tv As Object, XMLFile As String) As Boolean
Dim oDoc As New DOMDocument

If Not LCase(TypeName(tv)) = "treeview" Then Exit Function
    tv.Nodes.Clear

If Dir(XMLFile) = "" Then Exit Function
    If oDoc.Load(XMLFile) Then
        XMLNodes2TVNodes tv, oDoc.childNodes, 0
End If

ErrorHandler:
    Set oDoc = Nothing

End Function

Private Sub XMLNodes2TVNodes(tv As TreeView, ByRef Nodes As MSXML.IXMLDOMNodeList, ByVal Indent As Integer, Optional ParentKey As Variant)

    Dim oNode As MSXML.IXMLDOMNode
    Dim lKey As Long
    Dim sKey As String
    
    Indent = Indent + 2

    For Each oNode In Nodes
        If LCase(oNode.nodeName <> "xml") Then
            If oNode.hasChildNodes = False Then
                If oNode.nodeType = NODE_TEXT Or oNode.nodeType = NODE_CDATA_SECTION Then
                    tv.Nodes.Add CStr(ParentKey), tvwChild, , oNode.nodeValue
                End If
          
            Else
                On Error Resume Next
                If IsMissing(ParentKey) Then
                    sKey = oNode.nodeName
                    tv.Nodes.Add , , sKey, sKey
                Else
                    Do
                        On Error Resume Next
                        sKey = oNode.nodeName & CStr(lKey)
                        tv.Nodes.Add CStr(ParentKey), tvwChild, sKey, oNode.nodeName
                
                        If Err.Number <> 0 Then
                            Err.Clear
                            lKey = lKey + 1
                        Else
                            Exit Do
                        End If
                    Loop
                End If
            End If

            If oNode.hasChildNodes Then
                XMLNodes2TVNodes tv, oNode.childNodes, Indent, sKey
            End If
    End If
    Next oNode
End Sub

Conclusion :


Ajouter simplement un controle TREEVIEW dans votre feuille.

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de keopsk

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.