Harun Özer


Proje veya dijital katalog yaptırmak için
iletişim formu doldurabilirsiniz..

<< Url Routing | Javascript Validation Kütüphanesi>>

.Net de XML İşlemleri

Yazar harunozer 27 February 2011

.Net de XML İşlemleri XML (Extensible Markup Language - Genişletilebilir İşaretleme Dili) W3C tarafından tanımlanmış,platrofrm bağımsız yani farklı sistemler tarafından kullanabilen veri saklama dilidir.

Merhaba arkadaşlar. Bu yazıda .Net de XML ile ilgili işlemler (read-write) nasıl yapılır onu anlatmaya çalışacağım.Önce XML yapısından bahsediym biraz.Xml dosyasında ana veri birimi Element dir. Veriler elementlerin text inde veya attirbute lerin de tutulur.Xml dosyasının başında xml versiyonu,encoding tanımlaması gibi xml dosyasının özellikleri tanımlanır. Örneğin;

<?xml version="1.0" encoding="utf-8"?>

      <Kişiler>

           <Kişi TcNo="12345678910">

                <Adı>Ahmet</Adı>

                <Soyadı >Veli</Soyadı>

           </Kişi>

           <Kişi TcNo="14785236901">

                <Adı>Ayşe</Adı>

                <Soyadı>Çakır</Soyadı>

           </Kişi>

      </Kişiler>

 

Yukarıdaki örnek xml belgesinde root elemet Kişiler dir. Kişi element, TcNo Kişi elementinin attirbute si Adı,Soyadı elementleri ise Kişi elementinin child elementleridir.

.Net de Xml işlemleri System.Xml namespace si altındaki sınıflar ile yapılır.Şimdi aşağıdaki Xml dosyası için veri ekleme,silme ve güncelleme işlemleri yapalım.

<?xml version="1.0" encoding="utf-8"?>

<Kişiler>

     <Kişi ID="">

          <KimlikBilgileri TcNo="" >

               <Adı></Adı>

               <Soyadı></Soyadı>

          </KimlikBilgileri>

          <İletişimBilgileri>

               <Telefon></Telefon>

               <Adres></Adres>

               <Mail></Mail>

          </İletişimBilgileri>

     </Kişi>

</Kişiler>

 

 Yukarıdaki XML dosyasında KimlikBilgileri ve İletişimBilgileri kişi elementinin düğümleri dir.Gereklilik durumunda bunların içinde de alt düğümler oluşturulabilinir.Yukarıdaki XML dosyasına aşağıdaki kod bloğu ile veri eklenebilir.

strign Path  =  HttpContext.Current.Server.MapPath("~/App_Data/Kisiler.xml");

XmlDocument doc = new XmlDocument();  //Xml dosyamız için XmlDocument nesnesi oluşturuyoruz. 

doc.Load(Path); //Mevcut XML dosyamızı oluşturduğumuz nesneye yüklüyoruz. 

int id = 1;

try

{

      //LastChild ==> sonuncu element i verir .Attirbutes["ID"] ==> bu elementin ID attirbute sini verir InnerText ==> attirbute nin değerini verir

      id = Convert.ToInt32(doc.DocumentElement.LastChild.Attributes["ID"].InnerText); //eğer hiç veri yoksa NullReferenceException a düşer

      id++;

}

catch (NullReferenceException)

{

      id = 1; //eğer hiç veri yoksa id 1 olur.

}

XmlElement kisi = doc.CreateElement("Kişi"); //Kişi element i oluşturuyoruz

XmlAttribute ID = doc.CreateAttribute("ID"); //ID attirbutesi oluşturuyoruz

ID.Value = id.ToString(); //ID attirbute sine değer atıyoruz

kisi.Attributes.Append(ID); //Kişi elementine ID attirbutesini atıyoruz

XmlNode KimlikBilgileri = doc.CreateNode(XmlNodeType.Element, "KimlikBilgileri", ""); //KimlikBilgileri Düğümünü oluşturuyoruz

//Anlaşılacağı üzere 1. Parametre NodeType si 2. si node adı 3. sü namespace adıdır.

//Namespace:İki farklı xml dosyası aynı isimli elementler içerebilirler.

//Bu tür durumlarla çakışmayı önlemek için namespace (isim uzayı) kullanılabilir. isim uzayı tanımlarken genellikle namespace olarak URL veya URN verilir.

//Bu şekilde namescape'lerin uniqu (tek) olması sağlanır. Çünkü aynı URL'den iki tane olamaz.

XmlAttribute TcNo = doc.CreateAttribute("TcNo"); //TcNo attirbutesini oluşturuyoruz

TcNo.Value = "12345678901";

KimlikBilgileri.Attributes.Append(TcNo); //KimlikBilgileri düğümüne TcNo attirbute sini ekliyoruz.

 

XmlNode Adi = doc.CreateNode(XmlNodeType.Element, "Adı", "");

Adi.InnerText = "Harun";

KimlikBilgileri.AppendChild(Adi);

XmlNode Soyad = doc.CreateNode(XmlNodeType.Element, "Soyadı", "");

Soyad.InnerText = "Özer";

KimlikBilgileri.AppendChild(Soyad);

kisi.AppendChild(KimlikBilgileri); //kisi elementine KimlikBilgileri düğümünü ekliyoruz.

XmlNode IletisimBilgileri = doc.CreateNode(XmlNodeType.Element, "İletişimBilgileri", "");

XmlNode Telefon = doc.CreateNode(XmlNodeType.Element, "Telefon", "");

Telefon.InnerText = "212 555 44 77";

IletisimBilgileri.AppendChild(Telefon);

XmlNode Adres = doc.CreateNode(XmlNodeType.Element, "Adres", "");

Adres.InnerText = "İstanbul";

IletisimBilgileri.AppendChild(Adres);

XmlNode Mail = doc.CreateNode(XmlNodeType.Element, "Mail", "");

Mail.InnerText = "harunozer@hotmail.com.tr";

IletisimBilgileri.AppendChild(Mail);

kisi.AppendChild(IletisimBilgileri); //kisi elementine IletisimBilgileri düğümünü ekliyoruz.

doc.DocumentElement.AppendChild((XmlNode)kisi); //yüklediğimiz xml dosyasına yeni oluşturduğumuz element i ekliyoruz

doc.Save(Path); //değişiklikleri kaydet

Veri silmek için ise ilk önce XmlDocument nesnesi oluşturup Load metodu ile mevcut dosyamızı bu nesneye yüklememiz gerekiyor. Sonra sileceğimiz veriyi yani node yi XmlNode nesnesine atayıp XmlDocument nesnesinin DocumentElement.RemoveChild metodu ile sileceğiz.Aynen aşağıdaki gibi.

strign Path  =  HttpContext.Current.Server.MapPath("~/App_Data/Kisiler.xml");

XmlDocument doc = new XmlDocument(); 

doc.Load(Path); 

object ID = 1;

XmlNode nod = doc.SelectSingleNode("//Kişiler//Kişi[@ID=" + ID.ToString() + "]");

if (nod != null)

{

      doc.DocumentElement.RemoveChild(nod);

      doc.Save(Path);

}

Şimdi de Xml belgesini nasıl okuyacağımızı görelim.Öncelikle kodumuzu kısaltmak için şöyle bir class ımız olsun ve okuduğumuz verileri bu class ın property lerine basalım.

public class EntKisi

{

      public int ID { get; set; }

      public string TcNo { get; set; }

      public string Adi { get; set; }

      public string Soyadi { get; set; }

      public string Telefon { get; set; }

      public string Adres { get; set; }

      public string Mail { get; set; }

}

Veriyi okumak için XmlDocument nesnesinin GetElementsByTagName() metodunu kullanacağız.Bu metod bize XmlNodeList tipinde bir class verir.Bu class ın metodlarını kullanarak verileri okuyup EntKisi class ına atacağız.

 

List<EntKisi> KisiList = new List<EntKisi>();

XmlNodeList nodList = doc.GetElementsByTagName("Kişi");

foreach (XmlNode item in nodList)

{

      EntKisi k = new EntKisi();

      k.ID = Convert.ToInt32(item.Attributes["ID"].InnerText); //Kişi nodundaki ID attirbute sini okuyoruz.

      XmlNode KimlikBilgileri = item.ChildNodes[0]; //Kişi nodundaki KimlikBilgilerini başka bir XmlNode classına atıyoruz.

      k.TcNo = KimlikBilgileri.Attributes["TcNo"].InnerText; //KimlikBilgileri nodundaki TcNo attirbute sini okuyoruz.

      k.Adi = KimlikBilgileri["Adı"].InnerText; //KimlikBilgileri nodundaki Adı elementini sini okuyoruz.

      k.Soyadi = KimlikBilgileri["Soyadı"].InnerText; //KimlikBilgileri nodundaki Soyadı elementini sini okuyoruz

      XmlNode IletisimBilgileri = item.ChildNodes[1]; //KimlikBilgileri nodunu okuduğumuz gibi İletişimBilgileri nodunu da okuyup EntKisi class ına atıyoruz.

      k.Telefon = IletisimBilgileri["Telefon"].InnerText;

      k.Adres = IletisimBilgileri["Adres"].InnerText;

      k.Mail = IletisimBilgileri["Mail"].InnerText;

      KisiList.Add(k); //okuduğumuz Kişi Nodunu Listemize ekliyoruz.

}

Veri güncellemek için ise XmlDocument nesnesinin DocumentElement.ReplaceChild(YeniNode,EskiNode) metodundan yararlanacağız.Veri güncellemeden önce değişiklik yapacağımız veriyi (Node) XmlDocument nesnesinden alacağız.Sonra veri eklerken oluşturduğumuz gibi XmlElement oluşturacağız ve bu metodun 1. parametresine bu Nodu 2. Parametresine ise XmlDocument nesnesinden aldığımız node yi vereceğiz.

XmlDocument nesnesinden bir Node yi silme işleminde de yaptığımız gibi alabiliriz.

XmlNode nod = doc.SelectSingleNode("//Kişiler//Kişi[@ID=" + ID.ToString() + "]");

Zaten ilk başta yeni kayıt nasıl oluşturacağımızı görmüştük.Tek farkı oluşturduğumuz element i Append değil eski element ile replace edeceğiz.

doc.DocumentElement.AppendChild((XmlNode)kisi);

satırı yerine

doc.DocumentElement.ReplaceChild((XmlNode)kisi, EskiNode);

satırını yazıp XmlDocument nesnemizin Save(Path) metodunu kullanacağız.

Konu ile ilgili örnek uygulamayı buradan indirebilirsiniz.

Tam Sayfa
Tags .net, Xml,
Kategoriler xml
İşlemler
Bu Makale 80  Kez Beğenildi.
İsim :    
e-Mail :    
Web Site :  
İmage :  
Güvenlik Kodu :  

Güvenlik Resmi
Resmi Yenile
    
Yorum :  
Tasarım Desenleri ve Mimarileri