Dodanie węzła do xml

0

Witam potrzebuje pomocy.
mam taki plik xml
title
problem polega na tym, że jak chcę dodać kolejną osobę to tworzy nowy węzeł prywatni a nie dodaje do istniejącego już.
mój kod

             List<klientprywatny> klienci = new List<klientprywatny>();
            klienci.Add(new klientprywatny() { Imie = txtImie.Text, Nazwisko = txtNazwisko.Text, });


            XDocument doc = XDocument.Load("Osoby.xml");
           XElement osoba = new XElement("prywatni",
              from klient in klienci
              orderby klient.Nazwisko, klient.Imie
              select new XElement("osoba",
                  new XElement("imie", klient.Imie),
                  new XElement("nazwisko", klient.Nazwisko)
                  )                                       
                );

            doc.Root.Add(osoba);
           doc.Save("Osoby.xml");
1

Dzieje się tak ponieważ dodajesz obiekt osoba do Roota. Wyciągnij noda o nazwie Klienci i do niego dodaj nowego klienta.

0

Dzięki za pomoc

0

a mam jeszcze dwa pytania
jak chce wyświetlić swojego XML to poniższy kod działa ale tylko dla klientów prywatnych, a chciałbym zrobić tak, aby program wiedział ze ma mi wyświetlić konkretne drzewo z mojego xml'a

  XmlReader file;
            file = XmlReader.Create("Osoby.xml", new XmlReaderSettings());
            DataSet ds = new DataSet();
            ds.ReadXml(file);
            dataGridView1.DataSource = ds.Tables[1];

jeśli zmienię

 dataGridView1.DataSource = ds.Tables["Prywatni"];

to nic nie widzę

drugie pytanie to czy pójdzie zrobić tak aby jak kliknie się już w datagrdzie na dane z XML to będzie można edytować i kasować cały węzeł

0

dane po wczytaniu do datagrida nie mają nic wspólnego z plikiem xml
jak chcesz zmiany z grida mieć w pliku to musisz sczytać dane z grida i je "ręcznie" zapisać do pliku xml.

Dlatego zamiast udziwniać sugeruje odczytać dane z xml i załadować do jakiejś kolekcji.
Potem tą kolekcję zbindować z gridem, dzięki temu zmiany w gridzie będą miały odzwierciedlenie w kolekcji.
Na koniec tą kolekcję zapisujemy (serializujemy) do pliku xml.

0

załadować do kolekcji

  XDocument xmlDoc = XDocument.Load("Osoby.xml");
            List<klientprywatny> lista = xmlDoc.Descendants("osoba").Select(d =>
            new klientprywatny
            {
                Imie = d.Element("imie").Value,
                Nazwisko = d.Element("nazwisko").Value,
                miasto = d.Element("miasto").Value,
                ulica = d.Element("ulica").Value,
                kodpocztowy = d.Element("kodpocztowy").Value,
                telefon = d.Element("telefon").Value,
                email = d.Element("email").Value,
                numer = d.Element("numer").Value
            }).ToList();

            dataGridView1.DataSource = new BindingSource { DataSource = lista };

Czy dobrze to robie ??
i teraz jak zedytuje coś w datagridzie to edytuje się też w kolekcji ?

0

bump

1 użytkowników online, w tym zalogowanych: 0, gości: 1