mehmetduran.com - Paylaşmak Güzeldir...
Linq to Xml (Linq Konusuna Devam)
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:

Linq to Xml

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!
Mehmet Duran 22 Eylül Pazartesi 2008 6 16503 5,0
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Asp.net ile Dinamik Kontrol Oluşturma ve Değerlerini Alma MySql'de Stored Procedure Tanımlama ve Kullanma Asp.net'te Veritabanı Bağlantı Cümlesini Web.Config'de Tanımlama Asp.net ve Mysql ile Dataları Sayfalama İşlemi Linq Quickly (E - Book)
Yorumlar
Yorum Yaz
RSS Yorum Takibi
doruk 14 Şubat Cumartesi 2009 19:07 #1
çok güzel bir örnek basit ama net olmuş teşekkürler.
kugumulu 28 Şubat Cumartesi 2009 10:43 #2
peki bunun tam tersini nasıl yapabiliriz.örnegin databasedeki tablomu xmlde göstermek istiyorum ayrıca tabloda guncelleme yaptıgımda bundan xmlinde etkilenmesini istiyorum acaba cok mu istiyorum :)
Mehmet Duran 28 Şubat Cumartesi 2009 10:47 #3
Merhaba. İstediğin şekilde örneklerde var sitemde. Sitemap ve rss hazırlama örneği senin istediğin gibi bir örnek. Veritabanından verileri alarak xml oluşturuluyor. Ancak kullanacağın veriler çok büyük ise bu yöntem faydalı olmayabilir. Veritabanında verileri direk olarak xml biçiminde de saklayabilirsin.
KOPYASEVMEZ 12 Ocak Çarşamba 2011 21:27 #4
merhaba, bi projede ugrasıyorum demişsiniz acaba uğraştığınız bu projeyi aşağıda linkini vereceğim kişi ile birliktemi yazdınız. http://www.muratyuksel.org/Linq-to-Xml.html#WriteComment
Mehmet Duran 13 Ocak Perşembe 2011 09:03 #5
@kopyasevmez, yazımda bir proje ile uğraştığımdan bahsetmedim. Ayrıca söylediğin arkadaş ile de bir çalışmam olmadı. Biraz zahmet edip baksaydın linkini verdiğin arkadaşın o yazı dahil birkaç yazıyı benden aldığını görecektin. Ayrıca biraz daha zahmet etseydin o yazının benim yazımdan 2 yıl sonra yazıldığını da farkederdin. Bunun gibi çok örnek var anlaman için ama sana anlatmakta fayda yok gibi.
Durma devam et.
Fan Of mehmetduran.com 13 Ocak Perşembe 2011 14:57 #6
Bence de haklısın Mehmet. Emeğe saygısı olmayanlar reklam yapmaya çalışıyorlar. Azıcık reklama ihtiyaçları var.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Hizmet amaçlı işler başarıya, kar amaçlı olanlar ise başarısızlığa yöneliktir.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009