[Visual Basic 2005] XML-Dateien richtig lesen

Moin,

folgendes: Hab ein Programm, in dem man Bestimmte Codes, die man mal wo gesehen hat, aber nicht wieder vergessen will, speichern kann. Ich dachte mir, dass da xml-dateien ganz geignet wären. Also, ich schreibe also die gewünschten Dinge in diese XML-datei.

Code:
Private Sub XMLWriter()
        Dim enc As New System.Text.UnicodeEncoding
        Dim XMLobj As Xml.XmlTextWriter _
          = New Xml.XmlTextWriter("Codes.xml", enc)
        With XMLobj
            .Formatting = Xml.Formatting.Indented
            .Indentation = 4
            .WriteStartDocument()
            .WriteStartElement("Codes")
            .WriteStartElement("Codes")
            .WriteAttributeString("Codename", TextBox2.Text)
            .WriteAttributeString("Code", RichTextBox2.Text)
            .WriteAttributeString("Bemerkung", TextBox3.Text)
            .WriteEndElement()
            .WriteEndElement()

            .Close()
        End With
    End Sub

Die XML-Datei sieht dann folgendermasen aus:

Code:
<?xml version="1.0" encoding="utf-16"?>
<Codes>
    <Codes Codename="Testname" Code="Testcode" Bemerkung="Testbemerkung" />
</Codes>

Jetzt muss ich dann natürlich bei gegebenem Anlass das ganze auch wieder auslesen! Mein Code dazu bisher:

Code:
Function ReadArgs()
        Dim reader As XmlNodeReader
        Try
            Dim doc As New XmlDocument
            doc.Load("Code.xml") 'Pfad zur XML-Datei hier einfuegen
            reader = New XmlNodeReader(doc)
            While reader.Read
                Select Case reader.NodeType
                    Case XmlNodeType.Element
                        If reader.Name = "Codes" Then
                            Me.ComboBox1.Text = reader.GetAttribute("Codename")
                            Me.RichTextBox1.Text = reader.GetAttribute("Code")
                            Me.TextBox1.Text = reader.GetAttribute("Codebemerkung")
                        End If
                End Select
            End While
        Catch ex As Exception
        Finally
            If Not (reader Is Nothing) Then
                reader.Close()
            End If
        End Try
    End Function

Kann natürlich nicht funktionieren, aber ich hab ehrlich gesagt bei XML-Dateien auch nicht DEN Durchblick - wär also nett, wenn ihr mir diesbezüglich helfen würdet!

Mfg LuziferxXx
 
Da du beim einlesen ein XmlDocument verwendest benötigst du keinen XmlNodeReader. Das XmlDocument lädt mit der Methode load ein Abbild der XML in den speicher. Darauf kannst du direkt zugreifen. Das funktioniert über ChildNodes. Beispielsweise ist Document.FirstChild in deinem Fall die XML Deklaration.

Mit einer for each Schleife kannst du also die ChildNodes durchlaufen. Dabei erhälst du immer ein Node. Um zu überprüfen ob es sich um ein Element handelt nutzt du node.NodeType . Dieses Element hat dann wieder Kinder und das geht rekursiv so weiter.

Ein Node kann eigentlich alles sein. XML Deklaration, Element, Attribute. Das sind immer Kinder von dem jeweils übergeordneten. Solltest du noch fragen haben kann ich gern mal ein Beispiel erstellen.
 
Alternativ könnte man auch eine Klasse zum Kapseln/Speichern der Daten verwenden und diese dann Serialisieren bzw. Deserialisieren.
Hat den Vorteil, dass man sich nicht mehr um die XML "Verwaltung" kümmern muss.

System.Xml.Serialization.XmlSerializer ist auf jedenfall einen Blick wert.

MfG
 
Zurück
Oben