IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème de fichier XML [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Par défaut Problème de fichier XML
    Bonjour,

    Sur l'application que je commence à coder, je suis confronté à un problème dont je ne parviens pas à trouver la solution.

    En effet, j'ai le code suivant, pour exporter le contenu d'un TreeView dans un fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     Dim sr As StreamWriter
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     
            sr = New StreamWriter("MonFichier.xml")
     
            sr.WriteLine("<?xml version=""1.0"" encoding=""ISO-8859-1""?>")
     
            sr.WriteLine("<" & TreeView1.Nodes(0).Text & ">")
     
            For Each Noeud As TreeNode In TreeView1.Nodes
     
                saveNode(Noeud.Nodes)
     
            Next
     
            sr.WriteLine("</" & TreeView1.Nodes(0).Text & ">")
     
            sr.Close()
     
     
        End Sub
     
        Private Sub saveNode(tnc As TreeNodeCollection)
     
            For Each Noeud As TreeNode In tnc
     
                If Noeud.Nodes.Count > 0 Then
     
                    sr.WriteLine("<" & Noeud.Text & ">")
                    saveNode(Noeud.Nodes)
                    sr.WriteLine("</" & Noeud.Text & ">")
     
                Else
     
                    sr.WriteLine(Noeud.Text)
     
                End If
     
            Next
     
        End Sub
    Puis, j'ai le code suivant, pour faire l'inverse, à savoir lire un fichier XML et l'utiliser pour créer les noeuds dans le TreeView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
     
            Dim xDoc As XmlDocument = New XmlDocument
     
            xDoc.Load("MonFichier.xml")
     
            TreeView1.Nodes.Clear()
     
            TreeView1.Nodes.Add(New TreeNode(xDoc.DocumentElement.Name))
     
            Dim tNode As TreeNode = New TreeNode()
     
            tNode = TreeView1.Nodes(0)
     
            addTreeNode(xDoc.DocumentElement, tNode)
     
            TreeView1.ExpandAll()
     
        End Sub
     
        Private Sub addTreeNode(Noeud As XmlNode, TNoeud As TreeNode)
     
            Dim xNode As XmlNode
            Dim tNode As TreeNode
     
            Dim xNodeListe As XmlNodeList
     
            If Noeud.HasChildNodes Then
     
                xNodeListe = Noeud.ChildNodes
     
                For i = 0 To xNodeListe.Count - 1
     
                    xNode = Noeud.ChildNodes(i)
                    TNoeud.Nodes.Add(New TreeNode(xNode.Name))
                    tNode = TNoeud.Nodes(i)
                    addTreeNode(xNode, tNode)
     
                Next
     
            Else
     
                TNoeud.Text = Noeud.OuterXml.Trim()
     
            End If
     
     
        End Sub
    Le problème est que lorsque j'ai un TreeView présenté ainsi :

    Nom : 2020-03-09_12h36_41.png
Affichages : 208
Taille : 1,3 Ko

    Lorsque je crée le XML à partir de ce dernier, le code dans le fichier est le suivant :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Arbo>
    <Item1>
    TOTO
    TUTU
    </Item1>
    </Arbo>

    Les items TOTO et TUTU apparaissent l'un après l'autre sans balise !

    Et du coup, une fois que je charge le fichier pour créer les noeud dans un TreeView vide, voici le résultat :

    Nom : 2020-03-09_12h38_19.png
Affichages : 216
Taille : 1,2 Ko

    Ne connaissant pas vraiment le format XML, quelqu'un pourrait-il m'expliquer comment faire pour éviter ce résultat, et bien faire apparaître les deux derniers noeuds enfants comme deux noeuds séparés et non un seul avec les deux noms concaténés svp ?

    Merci d'avance de votre aide !

    Bonne journée.

    Cordialement-

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    Le plus simple serait de faire une classe et de générer directement le xml depuis cette classe
    https://docs.microsoft.com/en-us/dot...-serialization

    Sachant que tu pourra le faire dans l'autre sens aussi ...

  3. #3
    Membre éclairé Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Par défaut
    Salut youtpout978,

    Merci pour ta réponse. Mais je ne comprends vraiment rien à la façon de sérialiser un TreeView

    Je pense que je vais chercher quelque chose de plus simple avant de me lancer là-dedans.

    Cordialement-

  4. #4
    Membre éclairé Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    Février 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : Février 2012
    Messages : 186
    Par défaut
    Bon je suis arrivé à faire ce que je voulais !

    Voici ce que j'ai utilisé pour ceux que ça intéresserait :

    Code pour le bouton de sauvegarder en fichier XML du TreeView :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     Private Sub BtnSauvegarder_Click(sender As Object, e As EventArgs) Handles BtnSauvegarder.Click
     
            TreeViewToXml(TreeView1, "TreeView.xml")
     
     End Sub
     
     Private Sub TreeViewToXml(TV As TreeView, path As String)
     
            xmlDoc = New XmlDocument()
     
            xmlDoc.AppendChild(xmlDoc.CreateElement("ROOT"))
            XmlExport(xmlDoc.DocumentElement, TV.Nodes)
            xmlDoc.Save(path)
     
     End Sub
     
     Private Function XmlExport(ByVal nodeElement As XmlNode, ByVal treeNodeCollection As TreeNodeCollection) As XmlNode
     
            Dim xmlNode As XmlNode = Nothing
     
            For Each treeNode As TreeNode In treeNodeCollection
     
                xmlNode = xmlDoc.CreateElement("TreeViewNode")
                xmlNode.Attributes.Append(xmlDoc.CreateAttribute("value"))
                xmlNode.Attributes("value").Value = treeNode.Text
     
                If nodeElement IsNot Nothing Then nodeElement.AppendChild(xmlNode)
     
                If treeNode.Nodes.Count > 0 Then
                    XmlExport(xmlNode, treeNode.Nodes)
                End If
     
            Next
     
            Return xmlNode
     
     End Function
    Et le code pour le bouton permettant de charger les données du TreeView depuis le fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     Private Sub BtnCharger_Click(sender As Object, e As EventArgs) Handles BtnCharger.Click
     
            XmlToTreeView("TreeView.xml", TreeView1)
     
     End Sub
     
     Public Sub XmlToTreeView(ByVal path As String, ByVal treeView As TreeView)
     
            Dim xmlDoc As New XmlDocument()
     
            xmlDoc.Load(path)
            treeView.Nodes.Clear()
            XmlImport(treeView.Nodes, xmlDoc.DocumentElement.ChildNodes)
     
     End Sub
     
     Private Sub XmlImport(ByVal elem As TreeNodeCollection, ByVal xmlNodeList As XmlNodeList)
     
            Dim treeNode As TreeNode
     
            For Each myXmlNode As XmlNode In xmlNodeList
     
                treeNode = New TreeNode(myXmlNode.Attributes("value").Value)
     
                If myXmlNode.ChildNodes.Count > 0 Then
                    XmlImport(treeNode.Nodes, myXmlNode.ChildNodes)
                End If
     
                elem.Add(treeNode)
     
            Next
     
     End Sub
    Avec ce code, je n'ai plus le problème que j'avais au début et le TreeView une fois chargé correspond bien à ce que j'avais avant ! Donc tout roule.

    Merci.

    Cordialement-

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème chargement fichier XML vers un DataSet
    Par verbal34 dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 11/07/2010, 23h26
  2. Problème en fichier XML
    Par soumti84 dans le forum Format d'échange (XML, JSON...)
    Réponses: 23
    Dernier message: 18/04/2009, 17h12
  3. Problème écriture fichier xml
    Par ludo24 dans le forum ASP
    Réponses: 23
    Dernier message: 23/06/2008, 11h48
  4. [C#] Problème chargement fichier xml dans treeview
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2006, 14h10
  5. [SAX] Problème lecture fichier xml
    Par BernardT dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 07/07/2005, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo