Son günlerde üzerinde çalıştığım Linq ile şimdi de xml belgeleri nasıl kullanabileceğimizi göstermeye çalışacağım. Linq to xml ile xml belgeleri sorgulayıp bu belgelerden alınan verileri kullanacağız. Bu yolla yine birçok işi rahatlıkla çözeceğiz. Linq to xml için Framework 3.5 kullanıyoruz. Kodlama yapacağımız sayfaya
System.Xml.Linq kütüphanesini eklememiz gerekir.
Yapacağımız örneğe ve kodlara bakacak olursak:
Öncelikle üzerinde çalışacağımız dosya.xml dosyası şu şekilde olacak:
<?xml version="1.0" encoding="utf-8" ?>
<kisiler>
<kisi>
<no>1</no>
<isim>Mehmet</isim>
<soyisim>Duran</soyisim>
</kisi>
<kisi>
<no>2</no>
<isim>Sinan</isim>
<soyisim>Özkan</soyisim>
</kisi>
<kisi>
<no>3</no>
<isim>Semih</isim>
<soyisim>Öztürk</soyisim>
</kisi>
<kisi>
<no>4</no>
<isim>Burak</isim>
<soyisim>Karatatar</soyisim>
</kisi>
<kisi>
<no>5</no>
<isim>Sedat</isim>
<soyisim>Altuner</soyisim>
</kisi>
</kisiler>
Linq to xml ile xml belgeden veri çekmek için ilk sorgumuz şöyle:
XDocument doc = XDocument.Load(Server.MapPath("~/dosya.xml"));
var kisiler = from p in doc.Elements("kisiler").Elements("kisi")
select p;
GridView1.DataSource = kisiler.AsEnumerable();
GridView1.DataBind();
Bu sorgu ile elde edeceğimiz veri çok kullanışlı olmuyor. Çünkü; bu sorgu xml belgenin
Value değerini,
Xml bilgilerin html format değerini,
HasAttiributes,
HasElements,
IsEmpty ve
BaseUri gibi değerlerini dönderiyor. Daha kullanışlı bir yöntem için sorgumuzu şu şekilde yapabiliriz:
XDocument doc = XDocument.Load(Server.MapPath("~/dosya.xml"));
var kisiler = from p in doc.Elements("kisiler").Elements("kisi")
select new
{
No = p.Element("no").Value,
Isim = p.Element("isim").Value,
Soyisim = p.Element("soyisim").Value
};
GridView1.DataSource = kisiler.AsEnumerable();
GridView1.DataBind();
Bu sorgu ile xml belgedeki her element değerini belirlediğimiz sütuna atıyoruz. Bu sorgu ile oluşan ekran görüntüsü ise şöyle:
Görüldüğü gibi sütun adları sorgumuzda belirlediğimiz adlar. Çekeceğimiz her xml element değerini de farklı bir sütunda göstermeliyiz. Yoksa hataya düşeriz.
Ayrıca linq to xml yöntemi ile rss hizmeti olan herhangi bir websitesinin rss belgelerini de okuyabiliriz. Örnek olarak kendi sitemin rss belgesini okuyan ve sadece başlık verilerini çeken kodlar ise şöyle:
XDocument doc = XDocument.Load("http://www.mehmetduran.com/rss.aspx");
var kisiler = from p in doc.Elements("rss").Elements("channel").Elements("item")
select new
{
baslik = p.Element("title").Value
};
GridView1.DataSource = kisiler.AsEnumerable();
GridView1.DataBind();
İyi çalışmalar!