facebook


twitter




LINQ to XML Kullanımı (Select-Insert-Update-Delete)
0
yazar: vedattaylan | tarih: 26.11.2010 23:08:11

 

Merhabalar,

 

Bu makalede Microsoft’un .NET Framework 3.5 ile birlikte gelen LINQ to XML teknolojisi üzerinde duracağım. LINQ to XML ( .NET Language-Integrated Query (LINQ) Framework.);  Yazılımcıların .NET dilinde xml veri okuma ve yazma işlemlerini kolaylaştırması için hazırlanan bir platformdur. LINQ’nun temelinde de zaten XML vardır. Bu yüzden ikisinin birleşimiyle LINQ to XML doğmuştur. Bu bize XPath ve XSLT gibi ek dil sözdizimi temellerine başvurmak zorunda kalmadan XML ile çalışmamızı kolaylaştırır.

 

XML, bağımsız olarak tüm uygulama platformlarında (Windows ve Web uygulamaları, Mobile uygulamaları, Java uygulamarı vb.) veri alışverişini sağlayan bir teknolojidir. Bu esnekliğiyle birlikte bir XML verisini tüm platformlarda kullanabilirsiniz.

 

Şu an vedattaylan.com.tr olan web sitemin veri alışveriş temelide tamamen LINQ to XML yapısı ile hazırlanmıştır.

 

LINQ to XML’in temel olarak kullanacağımız üç sınıfı vardır. Bunlar XDocument, XElement, XAttribute. Bu yapıları iç içe herhangi bir sayıya kadar kullanabilirsiniz. Bunu bir örnekle açıklamak gerekirse ilk önce LINQ to XML’de bir veri nasıl eklenir onu görelim:

 

Insert :

 

XElement XArticleFile = Element.Load(HttpContext.Current.Server.MapPath("~/XML/Articles.xml")); // XML dosyamızı yeni bir veri eklemek için XElement’e ait Load metodunu kullanarak çağırıyoruz.

XElement newXArticle = new XElement(new XElement("Article", // XElement yapısında yeni bir Article adında element yaratıyoruz.

             new XAttribute("ID", Guid.NewGuid()), // Bu Article elementine ait bir Xattribute özelliği ekliyoruz. Her elementten sonraki gelen Xattribute değeri, o elementin attribute özelliği olmuş olur.

             new XAttribute("CategoryID", drpCategory.SelectedValue),

             new XElement("Title", txtTitle.Text.Trim()),

             new XElement("Author", "vedattaylan"),

             new XElement("CreatedDate", // XElement

                 new XAttribute("Date", DateTime.Now.ToString()), // CreatedDate elementine ait Date XAttribute değeri

                 new XElement("Day", DateTime.Now.Day.ToString()), // CreatedDate elementine ait Day XElement’i. Burda yukarda da bahsettiğim gibi iç içe bu yapıları dilediğiniz kadar kullanabilirsiniz.

                 new XElement("Mounth", DateTime.Now.Month.ToString()),

                 new XElement("Year", DateTime.Now.Year.ToString()),

                 new XElement("Hour", DateTime.Now.Hour.ToString())),

             new XElement("Content", txtFCKEditorArticle.Text),

             new XElement("Tags", txtTags.Text.Trim())

                ));

XArticleFile.Add(XArticle); // Çağırdığımız XML dosyamıza yeni verimizi ekliyoruz.

XArticleFile.Save(HttpContext.Current.Server.MapPath("~/XML/Articles.xml")); // XML dosyamızı tekrardan yeni veriyle birlikte kaydediyoruz.

 

Bu söz dizimi bize aşağıdaki gbi XML çıktısını verir.


 

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

<Articles> // Root Element

 <Article ID="ac608d05-7881-4534-8d4d-80d02748cbbb" CategoryID="3904e315-2e21-4d93-9bb1-54791a1b4999"> // XElement ( ID ve CategoryID bölümleride Article elementine ait XAttribute değerleridir.)

    <Title>LINQ to Xml ile Sorgulama (Select – Insert – Update - Delete)</Title>

    <Author>vedattaylan</Author>

    <CreatedDate Date="26.11.2010 05:04:20">

      <Day>26</Day>

      <Mounth>11</Mounth>

      <Year>2010</Year>

      <Hour>5</Hour>

    </CreatedDate>

    <Content>İçerik yazımız</Content>

    <Tags>ASP.net,CSharp,Enum</Tags>

  </Article>

</Articles>

 

Eklediğimiz bu veriyi daha sonra kullanmak yada göstermek amacıyla Select sorgusunu nasıl yapacağımızı görelim.

 

Select :

 

XElement XArticleFile = Element.Load(HttpContext.Current.Server.MapPath("~/XML/Articles.xml"));

IEnumerable<XElement> xArticles = (from u in xArticleFile.Elements("Article") select u).ToList();

 

Burda Generic tipinde olan IEnumerable Interface ile LINQ komut söz dizimlerini kullanarak Artciles.xml dosyasındaki tüm verileri kolay bir şekilde alıyoruz.

Eğer bir parametre kullanacaksak yani kategoriye ait (CategoryID) olan verileri almak istiyorsak. Komut söz dizimi aşağıdaki gibidir.

 

XElementXArticleFile = Element.Load(HttpContext.Current.Server.MapPath("~/XML/Articles.xml"));

IEnumerable<XElement> xArticles = (from u in xArticleFile.Elements("Article")

where u.Element("CategoryID").Value == CategoryID select u).ToList();

 

Şimdi sıra geldi Update işlemine.

 

Update :

 

XElement XArticleFile = Element.Load(HttpContext.Current.Server.MapPath("~/XML/Articles.xml"));

XElementXUpdateArticle = (from u in XArticleFile.Elements()

where u.Attribute("ID").Value == Article.Attribute("ID").Value select u).SingleOrDefault();

XUpdateArticle.SetElementValue("Title", "Başlık Değişti");

XArticleFile.Save(HttpContext.Current.Server.MapPath("~/XML/Articles.xml"));

 

Update işleminde aslında çokda yukardaki ile değişmeyen komut dizimine farklı olarak ID değerine ait olan verimizi çağırdıktan sonra XElement sınfına ait olan “SetElementValue” metodu ile verimizi kolayca güncelleyebiliyoruz ve yine dosyamızı Save metodu ile kaydederek işlemimizi bitiriyoruz.

Son olarak tabiki verimizi silmek istediğimizde ne yapacağız.

 

Delete :

 

XElement XArticleFile = Element.Load(HttpContext.Current.Server.MapPath("~/XML/Articles.xml"));

XElement XArticle = (from u in XArticleFile.Elements("Article")

where u.Attribute("ID").Value == ArticleID select u).SingleOrDefault();  // Burada SingeOrDefault metodu ile tek bir veri kayıtı alıyoruz.

XArticle.Remove(); // Silmek istediğimiz veriyi XElement sınıfına ait Remove metodu ile siliyoruz.

XArticleFile.Save(HttpContext.Current.Server.MapPath("~/XML/Articles.xml"));

 

Bu makalemizde LINQ to XML yapısı ile Select – Insert – Update ve Delete nasıl yapılır konusu üzerinde değindik. Umarım sizlere bir nebzede olsa faydası olmuş dileğiyle ve bir sonraki makalemde görüşmek üzere…

 

Vedat TAYLAN 

etiketler: LINQ to XML, LINQ

Bu makaleye henüz yorum yapılmamış.

Ad Soyad E-posta Web Sitesi


Bu kategorideki diğer makaleler