Serinin önceki bölümlerinde döküman okuma ve döküman güncelleme kısımlarını ele almıştık. Bugün de linq to xml ile döküman oluşturacağız.

Bir console uygulaması açarak basit bir örnek ile konuyu ele almaya başlayalım. Koordinat adında kök elementimiz olsun, içerisinde de Nokta adında elementler olsun ve her nokta içerisinde X, Y ve Z isminde child elementler tanımlayalım. İşlemi yapmaya bir döküman oluşturarak başlayacağız. Ardından bu döküman üzerine elementlerimizi ekleyeceğiz ve son adım olarak da dökümanı kaydedeceğiz.

class Program

    {

        static void Main(string[] args)

        {

            XDocument dokuman = new XDocument();

 

            dokuman.Add(

                new XElement("Koordinat", //root element

                    new XElement("Nokta", //child element

                        new XElement("X", 2),

                        new XElement("Y", 5),

                        new XElement("Z", -1)),

                    new XElement("Nokta",

                        new XElement("X", 0),

                        new XElement("Y", 0),

                        new XElement("Z", 0)),

                    new XElement("Nokta",

                        new XElement("X", -2),

                        new XElement("Y", 1),

                        new XElement("Z", 4))));

 

            dokuman.Save("Koordinatlar.xml");

 

        }

    }

oluşturduğumuz döküman exe’nin içinde bulunduğu klasöre, yani debug içerisine kaydedilecektir. Projemize sağ tuş tıklayarak “open folder in windows explorer” seçeniğne tıklayarak projemizin klasörüne gidebilir, buradan da bin –> debug klasörü içerisinde oluşturduğumuz xml dökümanını görebiliriz.

image

Bu işlemi direk olarak XElement tipi üzerinden de gerçekleştirmek mümkündür. Tek satırda döküman oluşturmak için bir XElement örnekleyerek içerisine child elementleri tanımlayabilir ve yine bu XEelement üzerinden Save metodunu çağırabiliriz.

class Program

    {

        static void Main(string[] args)

        {

            new XElement("Koordinat", //root element

                new XElement("Nokta", //child element

                    new XElement("X", 2),

                    new XElement("Y", 5),

                    new XElement("Z", -1)),

                new XElement("Nokta",

                    new XElement("X", 0),

                    new XElement("Y", 0),

                    new XElement("Z", 0)),

                new XElement("Nokta",

                    new XElement("X", -2),

                    new XElement("Y", 1),

                    new XElement("Z", 4))).Save("Koordinatlar2.xml");

        }

    }

 

image

Bir başka örnek üzerinden ilerleyelim. Sayilar adında bir döküman oluşturalım. İçerisinde Sayi adında child elementler olsun ve her element içerisinde sayının değerini, karesini ve küpünü göstermeye çalışalım. Bir de nitelik ekleyerek sayının asal olup olmama durumunu gösterelim.

class Program

    {

        static void Main(string[] args)

        {

            new XElement("Sayilar",

                new XElement("Sayi",

                    new XAttribute("AsalMi", true),

                    new XElement("Değeri", 5),

                    new XElement("Karesi", 25),

                    new XElement("Küpü", 125)),

                new XElement("Sayi",

                    new XAttribute("AsalMi", false),

                    new XElement("Değeri", 8),

                    new XElement("Karesi", 64),

                    new XElement("Küpü", 512))).Save("Sayilar.xml");

        }

    }

image

Şimdi de oluşturacağımız döküman için kullanacağımız dataların bir veri tabanından geldiğini düşünelim. Bunun için projemize bir Entity Data Model ekleyelim. (AdventureWorks veri tabanını kullanarak ilerliyor olacağım) Amacımız, Product tablosundaki en pahalı 5 ürünün adını ve kategori adını xml formatında yazdırmak olacak.

class Program

    {

        static void Main(string[] args)

        {

            AdventureWorksEntities context = new AdventureWorksEntities();

 

            new XElement("Urunler",

                context.Product.OrderByDescending(p => p.ListPrice).Take(5).ToList().Select(urun =>

                    new XElement("Urun",

                        new XElement("UrunAd", urun.Name),

                        new XElement("Kategori", urun.ProductSubcategory.ProductCategory.Name)))).Save("urunler.xml");          

 

        }

    }

image

Bir başka örnek ile devam edelim. ProductSubCategory tablosundaki ilk 5 alt kategoriyi çekerek isimlerini ve bu isimlere bağlı ilk 5 ürünü xml formatta oluşturmaya çalışalım.

class Program

    {

        static void Main(string[] args)

        {

            AdventureWorksEntities context = new AdventureWorksEntities();

 

            new XElement("Urunler",

                context.ProductSubcategory.Take(5).ToList().Select(sub =>

                    new XElement(sub.Name.Replace(" ", string.Empty),

                        sub.Product.Take(5).ToList().Select(urun =>

                            new XElement("Urun",

                                new XElement("Ad", urun.Name),

                                new XElement("Fiyat", (int)urun.ListPrice)))))).Save("urunler2.xml");

 

        }

    }

Burada alt kategori isimlerini yazdırırken Replace metodunu kullandık. Çünkü gelen alt kategori isimleri boşluklar içermektedir. Xml elementi tanımlarken boşluk kullanamayız. Oluşturduğumuz döküman aşağıdaki gibidir.

image

Yukarıdaki örneği bir üst seviyeye çıkaralım. İlk olarak Kategori isimlerinden elementler oluşturalım. Daha sonra bu kategorilere bağlı ilk 5 alt kategori ve bu alt kategorilere bağlı ilk 5 ürünü xml formatta bir dökümana kaydedelim.

class Program

    {

        static void Main(string[] args)

        {

            AdventureWorksEntities context = new AdventureWorksEntities();

 

            new XElement("Urunler",

                context.ProductCategory.ToList().Select(category =>

                    new XElement(category.Name,

                        category.ProductSubcategory.Take(5).ToList().Select(subCategory =>

                            new XElement(subCategory.Name.Replace(" ", string.Empty),

                                subCategory.Product.Take(5).ToList().Select(product =>

                                    new XElement("Urun",

                                        new XElement("Ad", product.Name)))))))).Save("urunler3.xml");

 

        }

    }

image

Şimdi de bir html dökümanı oluşturmaya çalışalım. Bir tablo oluşturarak ürünlerin id, ad ve fiyat bilgilerini görüntüleyelim.

class Program

    {

        static void Main(string[] args)

        {

            AdventureWorksEntities context = new AdventureWorksEntities();

 

            new XElement("html",

                new XElement("head",

                    new XElement("title", string.Format("{0} tarihinde LINQ to XML ile dinamik olarak üretildi.", DateTime.Now))),

                new XElement("body",

                    new XElement("table",

                        new XAttribute("border", 1),

                        new XElement("tr",

                            new XElement("td", "ID"),

                            new XElement("td", "Ad"),

                            new XElement("td", "Fiyat")),

                        new AdventureWorksEntities().Product.OrderByDescending(p => p.ListPrice).Take(10).ToList().Select(p =>

                            new XElement("tr",

                                new XElement("td", p.ProductID),

                                new XElement("td", p.Name),

                                new XElement("td", p.ListPrice.ToString())))))).Save("Anasayfa.html");

 

        }

    }

NOT: Bir dosyanın uzantısı o dosyanın tipini belirtmez. Çift tıklandığında hangi program ile açılacağını belirtir.

Oluşan dökümanı browserda açalım. Aşağıdaki gibi bir görüntü ile karşılaşacağız.

image



4 yorum:

безымянный dedi ki...

Не имеют индекс этого сайта? Я не говорю прямым тему! Переводы на другие языки, это плюс, хотя я не могу понять лучше

Adsız dedi ki...

Tesekkur ederim Cok güzel bir kaynak olmuş

Adsız dedi ki...

Teşekkür ederim. Sizi izliyorum/okuyorum.

Adsız dedi ki...

bvvbvvvnvnvbvghg

Yorum Gönder