LinqToXml

Eyl 06, 2013

LinqToXml, “System.Linq.Xml” kütüphanesi içinde yer alan bir özelliktir. Xml dosyalarını yönetmek için kullanılan teknolojidir.

Xml bütün uygulamalar için kullanılan ortak algılanılabilecek veri barındırma sistemidir. Farklı alanlar üzerinde bilgi alışverişi üzerinde veya bir bilginin farklı alanlarda kullanılabilmesi için yararlanılan bir özelliktir.

LinqToXml ile xml verileri, sorgu yazılarak istenildiği şekilde alınır. Veriler belirli bir sınıf tipinde alınır ve istenildiği gibi işlenir. LinqToXml ile bütün verilerin alınması zorunlu değildir. Sadece kullanılacak olan veriler alınıp geriye kalan özellikler hiç işlenmeyebilir. Bunun için XDocument sınıfının Elements() ve Element() metodları kullanılır. XDocument sınıfı xml dosyasının bütün içeriğini bir nesneye aktarılmasını sağlar. XDocument sınıfı xml dosyalarını nesneye aktarmak için Load() metodunu kullanır. Bu nesnenin elemanlarına Elements() metoduyla erişip istenilen değerler Element() metoduyla alınır. Eğer elemanların niteleyicisi varsa buna Attribute()metoduyla erişilir. Niteleyici, etiketin içerisinde olur. Mesela her elemanın bir kimliği varsa bu kimlikler elemanın alt özelliği olarak değil de etiketin içerisine yazılır ve bu değere Element() metodu ile değil de Attribute() metodu ile erişilir. Veriler herhangi bir nesneye atıldıktan sonra Repeater, Gridview, DataGrid ve bunlar gibi kontrollere aktarılacaksa AsEnumerable() metodu yardımıyla bir liste halinde aktarılır.

Uygulama:

Aşağıda bir uygulama ile bir xml veriye erişip verinin kullanımı anlatılmıştır.

  1. Öncelikle uzantısı .xml olan bir dosya oluşturulur.



  2. Daha sonra bu dosya projeye eklenir.

     

  3. .cs uzantılı dosyada System.Linq.Xml kütüphanesi eklenir. XDocument tipinde “xml” adında bir nesne oluşturulur. Bu nesneye Load() metodu ile “deneme.xml” dosyasının içeriğini yüklenir.

    using System.Xml.Linq;

    XDocument xml = XDocument.Load(Server.MapPath("~/deneme.xml"));

  4. Daha sonra linq sorgusu ile xml verisinin istenen değerleri Calisanlar nesnesine aktarılır. Bu uygulamada xml verisinin kök elemanı  “Calisanlar” olduğundan xml.Elements(“Calisanlar”) yazılmıştır. “Calisanlar” elemanının alt elemanları “Calisan” elemanlarıdır. Buna erişmek için xml.Elements(“Calisanlar”).Elements(“Calisan”) kodu kullanılmıştır. Bu elemanların içinden “Adi”, “Soyadi” ve “Yas” değerleri ise Element() metodunun Valueözelliği ile alınmıştır.

    var Calisanlar = from x in xml.Elements("Calisanlar").Elements("Calisan")
                            select new
                            {
                                Adi = x.Element("Adi").Value,
                                Soyadi = x.Element("Soyadi").Value,
                                Yas = x.Element("Yas").Value
                            };
  5. Alınan veri Calisanlar.AsEnumerable() ile “rpCalisan” Repeater’ının veri kaynağına aktarılmıştır.

    rpCalisan.DataSource = Calisanlar.AsEnumerable();
    rpCalisan.DataBind();

  6. Veri tasarım kısmında aşağıdaki gibi işlenir.

            <asp:Repeater ID="rpCalisan" runat="server">
                <HeaderTemplate>
                    <table>
                </HeaderTemplate>
                <ItemTemplate>
                    <tr>
                        <td><%# Eval("Adi") %></td>
                        <td><%# Eval("Soyadi") %></td>
                        <td><%# Eval("Yas") %></td>
                    </tr>
                </ItemTemplate>
                <FooterTemplate>
                    </table>
                </FooterTemplate>
            </asp:Repeater> 

  7. Proje derlendiği zaman çıktısı aşağıdaki gibi olur.