Bu makalede C# dili ile xml dosyası içerisine veri ekleme ve eklenen verileri okuma işlemlerini gerçekleştireceğiz. Bu yazıyla ilgileniyorsanız zaten xml teknolojisi hakkında bilgi sahibi olduğunuzu varsayıyorum. Yinede xml ile ilgili detaylı bilgi için XML Nedir, Ne İşe Yarar? isimli yazımı okumanızı tavsiye ederim. C#.Net’te XML üzerinde çalışmayı sağlayan sınıfların hepsi System.Xml namespace’i içerisinde toplanmıştır. Makalede kullanacağımız sınıflara kısaca bir göz atalım.
XMLTextReader Sınıfı; Bu sınıf XML dokümanlarındaki verileri stream şeklinde okuyarak, belleğe aktarma işlemlerini gerçekleştirir. Bu sınıf kullanılarak yapılan okuma işlemi, DataReader nesneleri ile yapılan okuma işlemlerine benzer. Okuma işlemi bir while döngüsü kullanılarak Read() metodu ile gerçekleştirilir.
XMLTextWriter; XML dosyası oluşturmak ve bu dosyanın içerisine etiket ve verilerin girilmesini sağlayan sınıftır. Bu sınıfın kurucu metodu ile disk üzerinde bir XML dosyası oluşturulabilir. Sonrasında XML dökümanında bulunması gereken etiket ve verilerin hepsi WriteXXX isimli fonksiyonlar kullanılarak gerçekleştirilir.
Kodların açıklamalarını detaylı bir şekilde satır aralarına ekledim.
XML Dosyası Oluşturma ve İçerisine Veri Yazma İşlemi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
XmlTextWriter yaz = new XmlTextWriter("okul.xml", System.Text.UTF8Encoding.UTF8); //Daha önce bu isimle oluşturulan bir XML dosyası var ise, eski dosya silinir. yaz.Formatting = Formatting.Indented; // Dosya yapısını hiyerarşik olarak oluşturarak okunabilirliği arttırır. try { yaz.WriteStartDocument(); //Xml dökümanına ait declaration satırını oluşturur. Kısaca yazmaya başlar. yaz.WriteStartElement("okul"); yaz.WriteStartElement("ogretmen"); //okul ve ogretmen etiketleri oluşturuldu. yaz.WriteAttributeString("id", "1"); yaz.WriteElementString("isim", "Kutlay"); yaz.WriteElementString("soyisim", "Işık"); yaz.WriteElementString("brans", "Bilişim"); //İçerik isim-değer çiftleri şeklinde ogretmen etiketinin içerisine element türünde eklendi. yaz.WriteEndElement(); yaz.WriteEndElement(); //okul ve ogretmen etiketleri sonlandırıldı. yaz.Close(); //XML akışı sonlandırıldı. Console.WriteLine("XML dosyası oluşturuldu ve veriler eklendi."); } catch (Exception ex) { Console.WriteLine("Hata Oluştu:" + ex.Message); } |
Yukarıdaki kod çalıştırıldığında projenizin exe dosyasının bulunduğu dizine okul.xml dosyası oluşturulacak ve içerisine veriler aşağıdaki gibi eklenecektir.
1 2 3 4 5 6 7 8 |
<?xml version="1.0" encoding="utf-8"?> <okul> <ogretmen id="1"> <isim>Kutlay</isim> <soyisim>Işık</soyisim> <brans>Bilişim</brans> </ogretmen> </okul> |
XML Dosyasından Veri Okuma İşlemi
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
XmlTextReader oku = new XmlTextReader("okul.xml"); try{ while (oku.Read()) //Dosyadaki veriler tükenene kadar okuma işlemi devam eder. { if (oku.NodeType == XmlNodeType.Element)//Düğümlerdeki veri element türünde ise okuma gerçekleşir. { switch (oku.Name)//Elementlerin isimlerine göre okuma işlemi gerçekleşir. { case "isim": Console.WriteLine( Convert.ToString(oku.ReadString())); break; case "soyisim": Console.WriteLine( Convert.ToString(oku.ReadString())); break; case "brans": Console.WriteLine( Convert.ToString(oku.ReadString())); break; } } } oku.Close(); } catch (Exception ex) { Console.WriteLine("Xml Bağlantı Hatası : " + ex.Message); } |
XML dosyasından verilerimizi okuttuk. Eğer kodlamada hata yapmadıysanız okuma işlemi sonrasında elde ettiğimiz veriler aşağıdaki gibi olacaktır.
C# ile XML dosyasına veri yazma ve okuma işlemleri bu kadar. Konuyla ilgili sorularınızı bana iletebilirsiniz.
Peki bunu xml dosyasını 1 kere oluşturup içindekileri döngüyle oluştursak id’ki sayıda döngüye göre otomatik artsa.Bunu nasıl yapaiblirim yardımcı olur musunuz?
merhaba xml dosya işlemleri bölümünde xml dosyası oluşturma ve bu dosyada ki verileri okumayı göstermişsiniz peki ben bu dosyanın üzerine veri eklemek istersem nasıl yapabilirim yardımcı olabilir misiniz? Mevcut haliyle her seferinde içeride ki bilgileri silip yenisini ekliyor ama ben önceki verilerim silinsin istemiyorum…
Oluşturduğunuz xml dosyasını açtıktan sonra gerekli düğümleri ekleyip, dosyayı kaydetmeniz yeterli olacaktır. Aşağıdaki kod bloğu istediğiniz işlemleri yerine getirecektir. Kolay gelsin.
XmlDocument doc = new XmlDocument();
doc.Load(“okul.xml”);
XmlElement element = doc.CreateElement(“ogretmen”);
element.SetAttribute(“id”, “2”);
XmlNode nodeTitle = doc.CreateElement(“İsim”);
nodeTitle.InnerText = “Murat”;
element.AppendChild(nodeTitle);
doc.DocumentElement.AppendChild(element);
doc.Save(“okul.xml”);
Öncelikle Merhaba bana bir proje verildi ve ben de araştıma yaptım ama bir kaynak bulamadım yardımcı olur musun amacım şu c# dan xml e veri ekliyorum ama bir kez daha aynısını yaptıgımda yeni bir mesela en sorular en üstteki onun bir altı soru1 diyelim bana soru1 den aynı bir tane daha oluşturup onun içine kullanıcıdan aldıgım veri ile doldurmak istiyorum yardımcı olur musun ?
Maalesef boş yere switch-case açmışsınız çünkü tüm case ifadeleri aynı işi yapıyor