4 Aralık 2008 Perşembe

LINQ to XML(XLINQ=> XML Language Integrated Query) Bölüm 2

Evet bu makale XML sorgularına giriş yapıyoruz.Bu sorgulamaları yaparken kullandığımız sınıflar için bir önceki makalemi inceleyebilirsiniz.Öncelikle XML sorgusuna başlarken örnek bir XML dökümanı oluşturuyoruz.Bunun için ben Microsoft'un sitesindeki örnek XML dökümanlarından biri olan PurchaseOrders.xml dosyasını aldım.

XDocument doc=XDocument.Load("PurchaseOrders.xml"); ile doc nesnesine öncelikle elementimizi yüklüyoruz.Böylece artık XML belgemiz belleğe yerleşti.
  • Yapacağımız ilk sorgu PurchaseOrder'ın içerisinde yer alan PurchaseOrderNumber'ı listeletmek olacak.
Bunun için yazacağımız sorgu şu olacaktır:
var purchase = from p in doc.Element("PurchaseOrders").Elements("PurchaseOrder")
select p.Attribute("PurchaseOrderNumber");

Burada yaptığımız işlem öncelikle doc nesnesindeki PurchaseOrders olan root elementine gitmek.Daha sonra ise bu root elementte bulunanan PurchaseOrder elementlerine ulaşıyoruz.PurchaseOrder tagı artık birden fazla olduğu için burada yapacak işlemlerimiz bu kadar.Daha sonra select bölümünde p'nin de PurchaseOrderNumber attribute'unu alıyoruz.Şuan purchase içerisinde PurchaseOrderNumber'lar bulunuyor.Bundan sonra yapacağımız, bu numaraları foreach döngüsü ile ekrana yazdırmak yada kullanmak.

foreach (var number in purchase)
{
Console.WriteLine(number.Value);
}
  • 2.sorgumuz ise daha karmaşık olacak.Burda yaptığımız ise adresleri içerisindeki elementlerle beraber sorgulamak olacak.Bunun için:
var purchases = from p in doc.Element("PurchaseOrders").Elements("PurchaseOrder")
let adres = p.Element("Address")
select new
{
Type = adres.Attribute("Type").Value,
Name = adres.Element("Name").Value,
Street = adres.Element("Street").Value,
City = adres.Element("City").Value,
State = adres.Element("State").Value,
Zip = adres.Element("Zip").Value,
Country = adres.Element("Country").Value
};

Öncelikle birinci örnekte olduğu gibi purchaseorder elementine yine erişiyoruz. let anahtar kelimesiyle bir değişken gibi tanımlama yapıyoruz.Böylece sorgumuzu uzun ve anlaşılması daha zor olmaktan kurtarıyoruz.Daha sonra bir anonymous tip yaratarak bu bilgileri tipin içine atıyoruz.Bilgileri kullnırken yine foreach ile alabiliriz.Ayrıca foreach içerisinde var ile tanımladığımız değişkene intellisense ile baktığımızda tanımladığımız tüm değişkenleri görebiliyoruz.


  • Son sorgumuz ise where anahtar kelimesinin kullanımı ile ilgili.Burada ise Adres elementi içerisndeki Ad elementinin 'E' başlayan değerleri bulacağız.Burada yazacağımız sorgu yukarıdakilerden daha kolay olacak:
var city = from p in doc.Element("PurchaseOrders").Elements("PurchaseOrder")
let name = p.Element("Address").Element("Name")
where name.Value[0] == 'E'
select name.Value;
where ile baş harfi kontrol ederek istediğimiz elementleri alabiliyoruz.

Programın tüm kodlarına buradan ulaşabilirsiniz.
Kolay Gelsin

0 yorum: