6 Haziran 2011 Pazartesi

LinqToXml

Xml, -eXtensible Markup Language- kısacası verileri elde etmek için, taşımak için vs. platform bağımsız çalışabilen, yani javacısı c#'cısı, php'cisi tarafından kullanılan bir işaretleme dilidir. Günlük hayatımızda sıkça xml dosyaları ile uğraşırız. Ya xml dosyasından veri okuruz, veya kendi xml'imizi okuyup, başka servislerin kullanımına sunarız. İşte bu Xml okuma ve yazma işlemlerini inceleyeceğiz birazdan.

C# 3.0 ile birlikte gelen LINQ teknolojisiyle, bu işlem daha da kolaylaşmış oldu. Artık onlarda satırlık xml oluşturma işlemini tek satıra bile sığdırabiliyoruz. Şimdi sırasıyla Xml okuma, güncelleme ve oluşturma işlemlerini Linq teknolojisini kullanarak örneklemeye çalışacağım.

Öncelikle bir xml dosyası oluşturup, buradan verileri okuyalım. Oluşturacağımız Urunler.xml dosyası aşağıdaki gibi olsun.



1-Xml Okuma: Öncelikle xml dosyasını yüklememiz gerekecek.

 XDocument doc = XDocument.Load("..\\..\\Urunler.xml");

Xml dosyamızı yükledikten sonra, artık tagler içinde dolaşabiliriz. Xml formatı gereği, en dışta tek element bulunması gerekir. Onun içinde birden fazla element bulunabilir ama. Buna göre, yazacağımız kodlarda şu iki metodu çok iyi bilmemiz gerekecek;
Element() ve Elements() Metotları...

Adım adım xml dosyasında dolaştığımızdan, en dıştan içe doğru girerken, önce kök elementini göreceğiz. Ürünler xml'inde tag'i bizim için kök elementtir. Yani tektir. Bu yüzden Element("Urunler") metodunu kullanmalıyız. Ardından birden fazla Urun olduğundan, Element("Urun") metodunu kullanacağız. Yani;

doc.Element("Urunler").Elements("Urun");

Bu yazdığımız kod, geriye IEnumerable  döndürür. Yani bir sorgudur bu yazdığımız kod. Bu sorgunun içinde foreach ile gezersek, Tüm ürün sınıfının altındaki elementlere ulaşmış olacağız. Yani ; 

foreach (XElement urun in doc.Element("Urunler").Elements("Urun"))
{
      Console.WriteLine("{0}-{1}", urun.Element("ID").Value, urun.Element("Ad").Value);
}

Bir örnek daha yazalım, daha anlaşılır olsun. Fiyatı 100'den küçük olan kaç tane ürün olduğunu ekrana yazdıralım.

Console.WriteLine(doc.Root.Elements().Count(s => int.Parse(s.Element("Fiyat").Value) < 100));


2-Xml Oluşturma : Yine aynı şekilde xml'imizi yükleyelim.


 XDocument doc = XDocument.Load("..\\..\\Urunler.xml");

Yine mantık aynı. en dışta kök elementi, ardından ürün sayısı kadar alt elementler oluşacak. Eğer kök elementinin içinde tek element varsa new Element() ile tek bir element oluşturuyoruz, birden fazla var ise new Elements() diyip yeni elementleri parametre olarak veriyoruz. Örnekte daha da iyi anlaşılacaktır.

 XElement yeni = new XElement("Urun",
                                   new XElement("ID", 4),
                                   new XElement("Ad", "Laptop"),
                                   new XElement("Fiyat", 1000));
            doc.Root.Add(yeni);


Yukarıda da anlayacağınız gibi, kök elementimize tek bir ürün elementi ekledik (XElement). Urun tag'inin içine de ID,Ad ve Fiyat elementlerini virgülle ayrılacak şekilde yazdık. Alt satıra geçmesi kafa karıştırmasın, tamamiyle kod okulurluğu sağlanması amaçtır. buna göre xml'imize Urun tagi içinde ID,Ad ve Fiyat bilgileri de eklenmiş olacaktır.

3-Xml Güncelleme: Diğer iki işlemlere göre daha basit bir işlem gerektirecek. Direk örnek üzerinden anlatmaya çalışacağım, anlaşılır olacaktır.

//1 idli ürünün fiyatını değiştirelim 400 olsun
  XElement urun = doc.Root.Elements().FirstOrDefault(s => s.Element("ID").Value == "1");
  urun.SetElementValue("Fiyat", 400);

Önce id'si 1 olan ürünü getirip, SetElementValue metodunu kullanarak, Fiyat'ını 400 yaptık. Oldukça basit bir işlem.

         Gördüğünüz gibi LINQ to XML ile, xml dosyası oluşturmak, var olan dosyada gerekli değişiklikler yapmak veya dosyadan veri okumak oldukça kolaylaştı. Eski yöntemlerde hata yapma oranı oldukça fazla olmasının yanında, onlarca satırlık kodu, 2-3 satıra sığdırmış olacağız. Bu konuyu öğrenmekte büyük fayda var, çünkü xml her ortamda karşımıza çıkacak olan bir konudur. Eğer linq biliyorsanız veya bilmeseniz bile kodları biraz kurcalamanız sonucunda rahatlıkla, verilen işlemleri yapabilir duruma geleceksiniz.

0 yorum: