Ajouter des données à un fichier xml

Résolu
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 7 nov. 2011 à 15:06
 Utilisateur anonyme - 7 nov. 2011 à 23:28
Bonjour à tous

J'utilise le xmltextwriter pour écrire dans un
fichier xml
que faut il écrire pour ajouter les données
au fichier s'il n'est pas vide
la premiere fois il est vide
la deuxième fois que je lance le prog
ajouter les données au fichier

merci d'avance

7 réponses

Utilisateur anonyme
7 nov. 2011 à 20:59
Tu devrais te pencher sur la sérialisation / dé-sérialisation.
Mais ce n'est qu'une suggestion bien entendu.
Un petit exemple pas commenté (mais tu comprendras vite je le sais)

Option Strict On
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim MaClasse As New Files

        MaClasse.Add(New File("tata", "1", 10))
        MaClasse.Add(New File("titi", "2", 200))
        MaClasse.Add(New File("toto", "1", 6))
        MaClasse.Add(New File("tutu", "7", 40))

        Dim ser As New Xml.Serialization.XmlSerializer(GetType(Files))
        Using writer As New IO.StreamWriter("test.xml")
            ser.Serialize(writer, MaClasse)
        End Using

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim MaClasse As New Files

        Dim ser As New Xml.Serialization.XmlSerializer(GetType(Files))
        Using reader As New IO.StreamReader("test.xml")
            MaClasse = CType(ser.Deserialize(reader), Files)
        End Using
    End Sub


    Public Class Files
        Dim _Liste As New List(Of File)

        Sub New()

        End Sub

        Sub Add(ByVal File As File)
            _Liste.Add(File)
        End Sub

        Property Liste As List(Of File)
            Set(ByVal value As List(Of File))
                _Liste = value
            End Set
            Get
                Return _Liste
            End Get
        End Property
    End Class

    Public Class File
        Dim _Nom, _Version As String
        Dim _Taille As Long

        Sub New()

        End Sub

        Sub New(ByVal nom As String, ByVal version As String, ByVal Taille As Long)
            _Nom = nom
            _Version = version
            _Taille = Taille
        End Sub

        Property Nom As String
            Set(ByVal value As String)
                _Nom = value
            End Set
            Get
                Return _Nom
            End Get
        End Property

        Property Version As String
            Set(ByVal value As String)
                _Version = value
            End Set
            Get
                Return _Version
            End Get
        End Property

        Property Taille As Long
            Set(ByVal value As Long)
                _Taille = value
            End Set
            Get
                Return _Taille
            End Get
        End Property
    End Class
End Class
3
Utilisateur anonyme
7 nov. 2011 à 23:28
Une fois que tu as lu ton xml tu peux ajouter ou modifier facilement des données :

Dim MaClasse As New Files
Dim ser As New Xml.Serialization.XmlSerializer(GetType(Files))
Using reader As New IO.StreamReader("test.xml")
    MaClasse = CType(ser.Deserialize(reader), Files)
End Using

'ajout d'un élément
MaClasse.Add(New File("bibi", "3", 240))

'modif d'une donnée existante
MaClasse.Liste.Item(0).Nom = "bubu"

'sauvegarde du xml
Using writer As New IO.StreamWriter("test.xml")
    ser.Serialize(writer, MaClasse)
End Using
3
Utilisateur anonyme
7 nov. 2011 à 20:00
Bonsoir ShayW,

Ce xml est-il généré ou lu par ton application ou les deux à la fois ?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 nov. 2011 à 20:38
Bonsoir Banana32
Mes premiers pas avec xml

Private textWriter As New XmlTextWriter(Application.StartupPath & "\testxml.xml", Nothing)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Writexml()
    End Sub
Private Sub Writexml()
   textWriter.WriteStartDocument()
           ' Write first element
   textWriter.WriteStartElement("Model")
   textWriter.WriteStartElement("ShapeRotation")
        ' Write next element
        textWriter.WriteStartElement("cxcxcdxfs")
        textWriter.WriteEndElement()
        textWriter.WriteStartElement("c22cxcdxfs")
        textWriter.WriteEndElement()
        textWriter.WriteEndElement()
        textWriter.WriteEndElement()
        ' Ends the document.
  textWriter.WriteEndDocument()
        ' close writer
   textWriter.Close()
    End Sub


je serai obligé aussi de lire le fichier
tout d'abord avec ce code le fichier est reécrit par dessus
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 nov. 2011 à 21:10
Bonjour,

Ajouter (append) à un xml existant n'est pas prévu, à ma connaissance.
Mais tu peux "contourner"
Je te suggère La lecture de cfette discussion . Elle est en anglais, mais très facile à comprendre.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
7 nov. 2011 à 21:16
Ah et j'oubliais :
Tu peux vouloir mettre un élément en attribut de cette façon :

<Xml.Serialization.XmlAttribute()> _
Property Taille As Long
    Set(ByVal value As Long)
        _Taille = value
    End Set
    Get
        Return _Taille
    End Get
End Property
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 nov. 2011 à 23:13
Ok
j'ai vu pas mal de tuto sur le web à propos
de la serialization
Bonsoir/Bonjour ucfoutu
j'ai lu l'article avec le

so you'd have to make use of psychic powers to figure out when to start appending
0
Rejoignez-nous