115122

C-Sharp: XML Anfänger benötigt Hilfestellung

Hallo,

ich würde gerne Einträge, welche ich in einer Listbox mache abspeichern, damit ich sie beim nächsten Öffnen meiner kleinen Anwendung noch sehe.

Information vorweg:
Ich habe zwei Listboxen, eine heißt "todo", die andere Box heißt "erledigt".

Habe mich also über XML und dessen Verwendung informiert und bisher folgenden Code zusammengeschustert:

//XML functions
        //Export
        private void ExportXML()
        {
            try
            {
                List<string> todoList = new List<string>();
                List<string> erledigtList = new List<string>();
                XmlSerializer serializer = new XmlSerializer(typeof(List<string>));
                TextWriter tw = new StreamWriter(Application.StartupPath + "\\savefile.xml");  

                for (int i = 0; i <= lbTodo.Items.Count - 1; i++)
                {
                    todoList.Add(lbTodo.Items[i].ToString());
                }

                for (int n = 0; n <= lbErledigt.Items.Count - 1; n++)
                {
                    erledigtList.Add(lbErledigt.Items[n].ToString());
                }
                serializer.Serialize(tw, todoList);
                serializer.Serialize(tw, erledigtList);
                tw.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }

        //Import
        private void ImportXML()
        {
            try
            {
                XmlDocument xmldoc = new XmlDocument();
                xmldoc.Load(Application.StartupPath + "\\savefile.xml");  
                XmlElement root = xmldoc.DocumentElement;
                XmlNodeList lst = root.GetElementsByTagName("string");  

                foreach (XmlNode n in lst)
                {
                    lbTodo.Items.Add(n.InnerText);
                    lbErledigt.Items.Add(n.InnerText);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }

Dort, wo jeweils beim Eintragen etwas gespeichert werden soll, habe ich die Funktion aufgerufen, siehe Beispiel:

if (chkTodo.Checked == true)
{
     lbTodo.Items.Add(tbEintrag.Text);
     ExportXML();
}

Beim Start des Programms wird "ImportXML()" aufgerufen, damit die Daten geladen werden.


So weit so gut, wenn ich Datensätze in die ToDo-Liste eingebe, erscheinen diese in der Listbox und werden gleichzeitig in ein XML File geschrieben, das funktioniert einwandfrei.

Schiebe ich nun einen Datensatz in die "erledigt"-Liste oder trage NUR in diese Liste einen Eintrag ein, so werden die Listen nicht mehr separat behandelt und die Datensätze werden in beiden Listen dargestellt.

D.h. mein Problem ist, dass das XML File nicht zwischen den beiden Listen unterscheidet. Ich habe das ganze mit zwei List-Items und zwei for-Schleifen getestet, das hat aber nicht funktioniert. (siehe in oberem Codebeispiel -> ExportXML-Funktion)

Falls jemand für mein Problem eine Lösung oder einen Tipp parat hat, wäre ich dafür sehr dankbar. ;)

Grüße
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 249646

Url: https://administrator.de/forum/c-sharp-xml-anfaenger-benoetigt-hilfestellung-249646.html

Ausgedruckt am: 30.05.2025 um 14:05 Uhr

colinardo
Lösung colinardo 19.09.2014, aktualisiert am 24.09.2014 um 10:31:54 Uhr
Goto Top
Hallo lordzwieback,
dein Problem ist das du beim importieren nicht zwischen den zwei Listboxen unterscheidest (Zeile 41-45). Ich würde das wenn du es mit dem Serializer machst über eine Klasse machen die für den Export den Listen der jeweiligen Listboxen entsprechende Attribute in der XML zuweist, die du dann beim importieren entsprechend differenziert in die jeweilige Listbox einlesen kannst.
Das ist hier sehr schön beschrieben:
http://tech.pro/tutorial/798/csharp-tutorial-xml-serialization

Grüße Uwe
115122
115122 19.09.2014 um 12:57:38 Uhr
Goto Top
Zitat von @colinardo:

Das ist hier sehr schön beschrieben:
http://tech.pro/tutorial/798/csharp-tutorial-xml-serialization

Grüße Uwe

Werde das mal testen und mich danach hier wieder melden. Danke für den Hinweis. face-smile
colinardo
Lösung colinardo 19.09.2014, aktualisiert am 24.09.2014 um 10:29:34 Uhr
Goto Top
Falls du es nicht selber schaffen solltest es umzusetzen, habe ich dir mal ein VS2010-Demo-Projekt zusammengestellt: xml_serialization_249646.zip

Das Projekt nutzt für den Import im Gegensatz zum klassischen Auslesen via XMLDocument das direkte Umwandeln des XML-Codes in Objekte mit der Deserialize-Methode des XMLSerializer Objektes. Da du diesen ja schon für den Export benutzt hast bietet sich dies an.

Grüße Uwe
115122
115122 22.09.2014 um 08:01:14 Uhr
Goto Top
Zitat von @colinardo:

Falls du es nicht selber schaffen solltest es umzusetzen, habe ich dir mal ein VS2010-Demo-Projekt zusammengestellt:
xml_serialization_249646.zip

Das Projekt nutzt für den Import im Gegensatz zum klassischen Auslesen via XMLDocument das direkte Umwandeln des XML-Codes in
Objekte mit der Deserialize-Methode des XMLSerializer Objektes. Da du diesen ja schon für den Export benutzt hast bietet
sich dies an.

Grüße Uwe

Wow danke für die Mühe, hatte übers Wochenende keine Zeit, werde mir das aber auf jeden Fall anschauen.

Grüße
115122
115122 24.09.2014 um 10:29:28 Uhr
Goto Top
So, habe mit dem Link und der Demo alles hinbekommen, vielen Dank für die Hilfe. face-smile

Grüße