Tutorial über das Speichern und Laden von XML-Dateien

    • VB.NET

    Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

      Tutorial über das Speichern und Laden von XML-Dateien

      Dieses Tutorial soll Wege aufzeigen, wie man leicht auf Text und ini-Dateien verzichten kann.

      Viele Anfänger versuchen alles und jedes in Text - bzw. Ini-Dateien zu speichern.
      Das es in Zeiten des dotNet Frameworks auch deutlich einfacher geht - möchte ich mit diesem Tutorial zeigen.

      Um dem Ganzen einen Rahmen geben zu können, programmieren wir in diesem Tutorial eine Adressverwaltungsprogramm, welches es dann auch als Download geben wird.
      Eine Adresse besteht - in unserem Fall - aus Name, Straße, Ort, Telefonnummer.
      Da wir möglichst Objekt Orientiert Programmieren möchten, packen wir die Daten in eine Klasse.
      Diese wird dann komplett gespeichert.

      1. XML-Serialisieren:
      Der klare Vorteil des Serialisieren liegt darin, dass ein verhältnismäßig kleiner Code zum Speichern und Laden der Dateien geschrieben werden muss.
      Ein weiterer Vorteil des Serialisierens besteht darin, dass beim Verändern der zu speichernden Daten keine Änderungen am eigentlichen Code (speichern und laden)
      vorgenommen werden muss.

      Hier der Einfachheit halber der Code der (Daten)Klasse:

      VB.NET-Quellcode

      1. Imports System.IO
      2. Imports System.Xml.Serialization
      3. Public Class ClassAdresses
      4. ''' Structure welche eine einzelne Adresse enthält.
      5. '''
      6. Public Structure adress
      7. Public name As String
      8. Public street As String
      9. Public place As String
      10. Public telefon As String
      11. Public Sub New(ByVal n As String, ByVal s As String, ByVal p As String, ByVal t As String)
      12. name = n
      13. street = s
      14. place = p
      15. telefon = t
      16. End Sub
      17. End Structure
      18. ''' Liste aller Adressen.
      19. ''' Eine List(Of ...) hat viele Vorteile gegenüber einem normalen Array.
      20. Private _adresses As New List(Of adress)
      21. ''' Beim verwenden des XMLSerialisieren MUSS in der zu speichernden Klasse
      22. ''' muss eine Leere Sub New vorhanden sein !
      23. '''
      24. Public Sub New()
      25. End Sub
      26. ''' Hinzufügen von neuen Adressen.
      27. '''
      28. Public Sub Add(ByVal name As String, ByVal street As String, ByVal place As String, ByVal telephone As String)
      29. _adresses.Add(New adress(name, street, place, telephone))
      30. End Sub
      31. ''' Gibt die Liste aller Adressen zurück oder setzt diese.
      32. '''
      33. '''
      34. ''' Beim XML-Serialisieren muss jedes zu speichernde Objekt über eine Property bereitgestellt werden.
      35. Public Property AllAdresses() As List(Of adress)
      36. Get
      37. Return _adresses
      38. End Get
      39. Set(ByVal value As List(Of adress))
      40. _adresses = value
      41. End Set
      42. End Property
      43. End Class


      Was beim XML-Serialisieren zu Beachten ist:

      1. Die zu speichernden Informationen sollten sich in einer eigenen Klasse befinden.
      2. Diese Klasse MUSS über eine leere Sub New verfügen.
      3. Jedes zu speichernde Objekt muss über eine Property nach Aussen hin zugänglich gemacht werden.

      Nun der Code zum Speichern bzw. Laden (Serialisieren):

      VB.NET-Quellcode

      1. Public Class CollectionSerialized
      2. ''' Funktion zum Speichern - via XML-Serialisieren.
      3. '''
      4. Shared Sub SaveXML(ByVal c As ClassAdresses, ByVal filename As String)
      5. 'Um die Daten Speichern zu können muss das Objekt an den XMLSerializer übergeben werden.
      6. 'In diesem Fall die Instanz der Klasse ClassDresses
      7. Dim xml As New XmlSerializer(GetType(ClassAdresses))
      8. Using fs As New FileStream(filename, FileMode.Create)
      9. xml.Serialize(fs, c)
      10. fs.Close()
      11. End Using
      12. End Sub
      13. ''' Funktion zum Laden - via XML-Serialisieren.
      14. '''
      15. '''
      16. Shared Function LoadXML(ByVal filename As String) As ClassAdresses
      17. 'Um die Daten laden zu können muss der Typ der Klasse bekannt sein - hier ClassAdresses
      18. 'Auch der Rückgabewert muss vom Typ der selben Klasse sein.
      19. Dim xml As New XmlSerializer(GetType(ClassAdresses))
      20. Dim ret As ClassAdresses
      21. Using fs As New FileStream(filename, FileMode.Open)
      22. ret = xml.Deserialize(fs)
      23. fs.Close()
      24. End Using
      25. Return ret
      26. End Function
      27. End Class

      Die Aufrufe für das Speichern und Laden sehen dann in etwa so aus.

      Speichern:

      VB.NET-Quellcode

      1. Private ca As New ClassAdresses
      2. CollectionSerialized.SaveXML(ca, "meinexml.xml")

      Laden:

      VB.NET-Quellcode

      1. Private ca As New ClassAdresses = CollectionSerialized.LoadXML("meinexml.xml")

      Wie mann sehen kann - alles sehr einfach.
      Und wie gesagt, verändert man die Klasse - welche Serialisiert werden soll - ändert sich nichts am Code zum Speichern
      und alte Dateien können nach wievor geladen werden.

      2.XML-Dateien mit XMLDocument erstellen:

      Tutorial folgt später

      Anmerkung:
      Da es unter VS2008 erstellt wurde, kann es nicht mit VS2005 geöffnet werden.

      ---
      Das Original dieses Tutorial's ist auf dieser Webseite veröffentlicht. Vielen Dank an unser Mitglied mikeb69
      Die Seite gibt es seit langem nicht mehr.

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „mikeb69“ ()

      Hier ist Serialisierung ebenfalls kurz abgehandelt, auch Verwendung verschiedener Serialisierer.
      Und mit generischem Code, der jedes (serialisierbare) Objekt verarbeiten kann, auch zum Download.
      Serialisierung kann ja mehr als nur in Dateien abspeichern, und es muss auch nicht immer Xml bei rauskommen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()