Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Entwicklung XML

Mitglied: lordzwieback

lordzwieback (Level 1) - Jetzt verbinden

19.09.2014, aktualisiert 24.09.2014, 1129 Aufrufe, 5 Kommentare

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:

01.
//XML functions 
02.
        //Export 
03.
        private void ExportXML() 
04.
05.
            try 
06.
07.
                List<string> todoList = new List<string>(); 
08.
                List<string> erledigtList = new List<string>(); 
09.
                XmlSerializer serializer = new XmlSerializer(typeof(List<string>)); 
10.
                TextWriter tw = new StreamWriter(Application.StartupPath + "\\savefile.xml"); 
11.
 
12.
                for (int i = 0; i <= lbTodo.Items.Count - 1; i++) 
13.
14.
                    todoList.Add(lbTodo.Items[i].ToString()); 
15.
16.
 
17.
                for (int n = 0; n <= lbErledigt.Items.Count - 1; n++) 
18.
19.
                    erledigtList.Add(lbErledigt.Items[n].ToString()); 
20.
21.
                serializer.Serialize(tw, todoList); 
22.
                serializer.Serialize(tw, erledigtList); 
23.
                tw.Close(); 
24.
25.
            catch (Exception ex) 
26.
27.
                MessageBox.Show(ex.Message.ToString()); 
28.
29.
30.
 
31.
        //Import 
32.
        private void ImportXML() 
33.
34.
            try 
35.
36.
                XmlDocument xmldoc = new XmlDocument(); 
37.
                xmldoc.Load(Application.StartupPath + "\\savefile.xml"); 
38.
                XmlElement root = xmldoc.DocumentElement; 
39.
                XmlNodeList lst = root.GetElementsByTagName("string"); 
40.
 
41.
                foreach (XmlNode n in lst) 
42.
43.
                    lbTodo.Items.Add(n.InnerText); 
44.
                    lbErledigt.Items.Add(n.InnerText); 
45.
46.
47.
            catch (Exception ex) 
48.
49.
                MessageBox.Show(ex.Message.ToString()); 
50.
51.
        }
Dort, wo jeweils beim Eintragen etwas gespeichert werden soll, habe ich die Funktion aufgerufen, siehe Beispiel:

01.
if (chkTodo.Checked == true) 
02.
03.
     lbTodo.Items.Add(tbEintrag.Text); 
04.
     ExportXML(); 
05.
}
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
Mitglied: colinardo
LÖSUNG 19.09.2014, aktualisiert 24.09.2014
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
Bitte warten ..
Mitglied: lordzwieback
19.09.2014 um 12:57 Uhr
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.
Bitte warten ..
Mitglied: colinardo
LÖSUNG 19.09.2014, aktualisiert 24.09.2014
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
Bitte warten ..
Mitglied: lordzwieback
22.09.2014 um 08:01 Uhr
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
Bitte warten ..
Mitglied: lordzwieback
24.09.2014 um 10:29 Uhr
So, habe mit dem Link und der Demo alles hinbekommen, vielen Dank für die Hilfe.

Grüße
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Voice over IP
PfSense: Anfänger benötigt Hilfe zum Thema VoIP und OpenVPN (12)

Frage von TorstenG zum Thema Voice over IP ...

XML
XML Datei Fehler? (1)

Frage von Patrick-IT zum Thema XML ...

Batch & Shell
Script zum XML Datei Umschreiben (12)

Frage von cberndt zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...