Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LIRE UN FICHIER XML À PARTIR D'UN CONTROLE TREEVIEW.


Information sur la source

Catégorie :OLE, DDE, Automation Niveau : Débutant Date de création : 13/05/2002 Date de mise à jour : 13/05/2002 17:36:18 Vu : 10 646

Note :
6,36 / 10 - par 14 personnes
6,36 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (23)
Ajouter un commentaire et/ou une note

Description

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

  • 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
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.
 

Commentaires et avis

signaler à un administrateur
Commentaire de keopsk le 13/05/2002 18:12:28

Oui, ça marche , merci

signaler à un administrateur
Commentaire de vbnul le 29/05/2002 19:01:43

Ca sert à quoi de lire les xml ???
et en plus y faut une DLL ??
pfff

signaler à un administrateur
Commentaire de Mercury le 30/05/2002 11:18:29

vbnul =&gt; (Pas mal le pseudo :o) ) Ca sert à quoi de lire du XML ? Ben à lire un fichier XML ! ;-))) Renseignes toi sur l'utilité du XML, XSL et DTD.

C'est clair que si tu n'utilises pas de fichier XML, l'intérêt pour toi est très minime. Concernant la DLL, elle est fourni par défaut avec IE5, donc rien d'autres à fournir pour utiliser ce code.

@+

Mercury

signaler à un administrateur
Commentaire de VB6Boss le 01/06/2002 12:07:52

Ouais c clair c set a quedale de lire les Xml, Xsl et Dtd.
Tu devrais passer a quelque chose de plus utile. Il y a plein d'exemples dans la rubrique des tutoriaux
Ne le prends pas mal.
Vb6boss

signaler à un administrateur
Commentaire de Mercury le 01/06/2002 15:41:58

C'est pas grave, on ne t'en veut pas d'être bête et gamin. Mais bon faute avouée et à moitié pardonnée ... Continue, tu tiens le bon bout.

signaler à un administrateur
Commentaire de Mercury le 01/06/2002 15:45:08

De plus, je reste perplexe, comme beaucoup, devant le contenu de tes commentaires, qui, bien entendu, portent tous sur le VB comme on peut le constater. Encore une preuve de ton immaturité. Et personnellement, je ne me cache derrière plusieurs pseudos sur le site pour insulter les autres ...

signaler à un administrateur
Commentaire de Mercury le 06/06/2002 17:31:57

VBKILLER = VB6BOSS = VBNUL ! La chasse est ouverte !
Merci Nix ;-)))

signaler à un administrateur
Commentaire de leptidev le 05/08/2002 14:08:43

Bonne source, excuse moi pour l'autre jour, je retire ce que j'ai dit, bonne idée d'exploiter un DLL déjà fournit, les autres sont juste jaloux à mon avis, franchement très bonne idée.

signaler à un administrateur
Commentaire de leptidev le 26/09/2002 14:16:26

Quelqu'un pourrait me dire ou trouver des info sur cette DLL ?

signaler à un administrateur
Commentaire de Mercury le 25/11/2002 11:10:55

Quel commentaire remarquable ! On voit tout de suite le niveau du mec !

signaler à un administrateur
Commentaire de Mercury le 25/11/2002 11:13:39

Ah ! J'allais oublier, vas faire un tour sur le lien suivant, avec un peu de chance, tu t'endormiras un peu moins bête ce soir (je crois au miracle) : http://www.codes-sources.com/news.aspx?ID=441

signaler à un administrateur
Commentaire de cauroir le 20/12/2002 13:08:17

Bonjour,
Je ne souhaite pas polemiquer et je trouve les commentaires vraiment NULS. On a un gars qui nous offre un programme pour lire les XML et les mettre dans un treeview et d'autres qui visiblement ne savent pas ce qu'est le xml qui se permettent de le demollir !!! Alors merci a mercury pour ce code et que ceux qui ne savent pas aillent se documenter !

signaler à un administrateur
Commentaire de Mercury le 20/12/2002 13:38:54

Merci Cauroir ;-) J'espère que ce code te sera vraiment utile.

signaler à un administrateur
Commentaire de sdominici le 30/04/2003 00:20:21

Merci pour ta source, pratique.

signaler à un administrateur
Commentaire de Guillaume1er le 25/09/2003 13:32:52

je pense kil ne fo meme pas porter attention a des commentaires non constructifs, la moindre contribution est en soit constructive, et cette source est tres utiles, quand a debattre sur lutilite de lire du xml, on a vraiment a faire a des anes

signaler à un administrateur
Commentaire de Rebuffat le 10/10/2003 11:43:23

Lire un fichier xml avec un contrôle treeview est tres utile. Tout depend de l application que l on souhaite faire.

Pour ma part j ai depose un source (sur un autre site) permettant d'etablir l'arborescence dynamiquement d'un fichier xml afin de rendre les fichiers xml lisibles dans une page web. L'utilisation de xsl dtd n'aurait pas permis de faire cela dynamiquement. Si le source interesse quelqu'un qu il me le fasse savoir.

A plus

signaler à un administrateur
Commentaire de Fabio972 le 09/12/2003 12:28:55

GENIAL CE CODE !!!!

Bon, moi c'est plutôt MSXML2.IXMLDOMNodeList car je suis sous XP (peut-être) mais ça marche du tonnerre. Un peu lent sur mon fichier mais une bonne base pour utiliser les informations en format XML.

Genial !!! 9/10

signaler à un administrateur
Commentaire de jbracque le 03/05/2004 15:39:21

Décidemment quand on ne sait pas ce qu'est un fichier xml, on ne voit forcément pas à quoi cela peut servir. Mais dire que c'est nul parce qu'on ne sait pas ce que sait, c'est que la personne doit être du niveau de la critique.
Enfin bref, ce petit bout de code va m'être très utile donc merci encore pour cette source.
J'ai encore un petit problème pour l'utiliser car je ne doit pas faire le bon lien avec la dll en question mais je ne désespère pas.
En ce qui me concerne 9/10 !

signaler à un administrateur
Commentaire de Nightcourrier le 13/05/2004 16:43:29

Très bien ton code, merci !

J'aimerais savoir, quand je click dans le treeview, aurait t'il une manière de retourner dans le XML et faire une recherche pour aller chercher d'autre information comme: d'après le onode.name avoir le onode.xml ?

Merci
Note : 9/10

signaler à un administrateur
Commentaire de candidus le 16/06/2004 00:27:38

Scuser moi,
Moi grosse merde débute en ASP, y a t'il la possibilité de m'expliquer comment insérer ce code euh...........
Je sais que c'est un peu abuser mais je galère pour commencer ASP
Alors si une âme charitable veut bien se dévouer, car je n'arrive pas à ajouter le control Treeview et le reste....

Merci pour la réponse. Je me replonge dans ASP plouf...

signaler à un administrateur
Commentaire de Fabio972 le 17/06/2004 18:12:25

AIE Candidus, tu auras du mal à mettre un treeeview en ASP car c'est un code pour Visual Basic :-)

Pour l'ASP, regardes par là : http://www.aspfr.com/

signaler à un administrateur
Commentaire de candidus le 18/06/2004 10:49:30

Gracias Fabio972,
On m'avait dit que le VB marcherai, mais .Net est un peu bizarrrr
;-)

signaler à un administrateur
Commentaire de sandrine29 le 29/09/2007 17:11:02


ça sert toujours merci

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.