(C#)Einträge aus einer Tabelle(listview) in XML speichern


fastfred

Mitglied
Hallo Community,

ich habe eine Tabelle in VS2005 mit listview erstellt. Ich habe 3 Spalten(Nr., Name, Vorname). Ich möchte jetzt jeden Eintrag in der Liste mit den Spalten in XML speichern.
Ich habe da schon was angefangen, aber komme irgendwie nicht weiter.

(die Tabelle hat den Namen "spielerliste")
Code:
Assembly assembly = Assembly.GetEntryAssembly();
                FileInfo fileinfo = new FileInfo(assembly.Location);
                string strAppDir = fileinfo.DirectoryName;

                XmlDocument hxml = new XmlDocument();
                hxml.Load(strAppDir + "/XML/Mannschaften.xml");
                XmlElement elmXML = hxml.CreateElement("Mannschaft");

                string[] strNewSpieler = new string[100];

                for (int i = 0; i < spielerliste.Items.Count; i++)
                {
                    strNewSpieler[i] = "<Nr" + i + ">" + spielerliste.Items[i].Text + "</Nr" + i + ">" +
                        "<Vorname" + i + ">" + spielerliste.Items[i].SubItems[0].Text + "</Vorname" + i + ">" +
                       "<Name" + i + ">" + spielerliste.Items[i].SubItems[1].Text + "</Name" + i + ">";
                }
                                        

                string strNewMannschaft = "<Name>" + this.teamname.Text + "</Name>" +
                                         "<Logo>" + this.logo.Text+ "</Logo>";
                


                elmXML.InnerXml = strNewMannschaft;
                hxml.DocumentElement.AppendChild(elmXML);

                hxml.Save(strAppDir + "/XML/Mannschaften.xml");

Kann mir jemand weiterhelfen?

Vorab schonmal Danke!

Fast Fred
 

Norbert Eder

Erfahrenes Mitglied
Also Elemente namens Vorname1, Vorname2 etc. sind nicht Sinn und Zweck von XML. Stattdessen verwende ein eigenes Element <id>.

Wieso schreibst du dann nicht auch die erste Spalte hinaus, die doch angeblich eine Nummer enthalten soll, sondern löst das über einen eigenen Counter? Strange ...


Jetzt ohne Test runterschrieben, so in etwa kannst du das umsetzen
C#:
XmlDocument doc = new XmlDocument();
XmlNode root = doc.CreateElement("mannschaften");
XmlNode ms = doc.CreateElement("mannschaft");

foreach (ListViewItem lvi in this.spielerliste.Items)
{
   XmlNode player = doc.CreateElement("player");
   XmlNode id = doc.CreateElement("id");
   id.InnerText = lvi.Index; // Oder einfach die erste Spalte hier, wenn du eine eigene Nr. Spalte hast
   XmlNode lastname = doc.CreateElement("lastname");
   lastname.InnerText = lvi.SubItems[1].Text;
   XmlNode firstname =  doc.CreateElement("firstname");
   firstname.InnerText = lvi.SubItems[2].Text;

   player.AppendChild(id);
   player.AppendChild(lastname);
   player.AppendChild(firstname);
}
ms.AppendChild(player);
root.AppendChild(ms);

root.Save(Application.StartupPath + "\\xml\\myXmlFile.xml");

Kann aber nicht garantieren, dass der obige Code funktioniert. Sollte eher symolischer Natur sein.
 

fastfred

Mitglied
Hallo Norbert,

vorab erstmal Danke! Das ist eine gute Idee nur es gibt ein Problem. Bei mir zeigt der den Fehler an, dass "player" nicht vorhanden ist, weil der wohl die Variable aus der foreach-Schleife nicht herauslesen kann.
Hättest du da noch eine Idee?

Gruß

Fast Fred
 

fastfred

Mitglied
Ja es funktioniert :)!
Der hat zwar immer nur den letzten Spieler aus der Liste gespeichert, doch das habe ich schnell behoben, indem ich

ms.AppendChild(player);

noch mit in die Schleife genommen habe.

Vielen, vielen Dank für dein Hilfe!

Gruß

Fast Fred
 

Forum-Statistiken

Themen
272.356
Beiträge
1.558.615
Mitglieder
187.832
Neuestes Mitglied
SirrDansen