.Net kullanmaya başladığımdan beri en çok beğendiğim özelliklerden biri hiç kuşkusuz Linq. Gerçekten bir çok konuda işleri bir hayli kolaylaştırmakta. Linq sayesinde diziler,sql, yazının konusu olan XML ve hatta google üzerinde bile işlem yapabiliyoruz. Daha önce linq ile nasıl sql işlemleri(sorguları) yapıldığından bahsetmiştim. Bu sefer de XML ile ilgili işlemlerin nasıl yapıldığından bahsedeceğim.
Aslından Linq kullanmadan da .Net'te XML işlemleri yapmak gayet kolay. Bir çok hazır sınıfın yanında XML şeması oluşturup daha sonra bunu sınıf yapısına çevirerek nesne olarak da işlem yapmak mümkün.
XML dosyamızın yapısı aşağıdaki şekilde
Veri Okuma
Veri okumak için XDocument sınıfından yararlanıyoruz. Bu sınıftan bir nesne türetip yine aynı sınıfın static "Load()" metodu yardımıyla dosyamızı açıyoruz ve üzerinde Linq ile işlem yapılabilir hale getiriyoruz.
Dikkat çekmek istediğim diğer metodlar "Element()" ve "Elements()". İlki tek bir "XElement" nesnesi döndürürken ikincisi "IENumrable" döndürür. Bundan dolayıda myUser değişkeni "IENumrable" tipinde bir değişken olur. İşin güzel tarafı Anonymous Type şeklinde veriler oluşturmakta mümkün. Bu sayede XML dosyasından çektiğimiz verileri direk olarak GridView,Dataview yada Repeater'a DatatSource olarak aktarmak mümkün
Veri Ekleme
Veri ekleme için ilk önce parent node'u seçtik. Daha sonra XElement sınıfından oluşturduğumuz nesneyi "Add()" metodunu kullanarak dosyaya ekledik ve kaydettik.
Veri Güncelleme
Linq cümlesi kullanarak "id" değeri "5" olan kaydı çektik, xml yapısında ID değerleri nitelik(attribute) olarak girildiği için "SetAttributeValue()" metodu ile değerini "100" olarak değiştirip dosyayı kaydettik.
Kolay gelsin...
Aslından Linq kullanmadan da .Net'te XML işlemleri yapmak gayet kolay. Bir çok hazır sınıfın yanında XML şeması oluşturup daha sonra bunu sınıf yapısına çevirerek nesne olarak da işlem yapmak mümkün.
XML dosyamızın yapısı aşağıdaki şekilde
<?xml version="1.0" encoding="utf-8"?> <kullanicilar> <kullanici id="1"> <ad>A</ad> <soyad>B</soyad> </kullanici> <kullanici id="2"> <ad>C</ad> <soyad>D</soyad> </kullanici> <kullanici id="5"> <ad>E</ad> <soyad>F</soyad> </kullanici> <kullanici id="8"> <ad>G</ad> <soyad>H</soyad> </kullanici> </kullanicilar>
Veri Okuma
Veri okumak için XDocument sınıfından yararlanıyoruz. Bu sınıftan bir nesne türetip yine aynı sınıfın static "Load()" metodu yardımıyla dosyamızı açıyoruz ve üzerinde Linq ile işlem yapılabilir hale getiriyoruz.
protected void Page_Load(object sender, EventArgs e) { XDocument doc = XDocument.Load(Server.MapPath("~/XMLFile.xml")); if (doc != null) { IEnumerable<XElement> myUsers = from t0 in doc.Element("kullanicilar").Elements("kullanici") select t0; foreach (XElement user in myUsers) { Response.Write(user.Element("ad").Value + " " + user.Element("soyad").Value + "<br />"); } } }
Dikkat çekmek istediğim diğer metodlar "Element()" ve "Elements()". İlki tek bir "XElement" nesnesi döndürürken ikincisi "IENumrable
protected void Page_Load(object sender, EventArgs e) { XDocument doc = XDocument.Load(Server.MapPath("~/XMLFile.xml")); if (doc != null) { var myUsers = from t0 in doc.Element("kullanicilar").Elements("kullanici") where t0.Element("ad").Value == "A" || t0.Element("ad").Value == "C" select new { Ad = t0.Element("ad").Value, Soyad = t0.Element("soyad").Value, }; grdUserList.DataSource = myUsers; grdUserList.DataBind(); } }
Veri Ekleme
protected void Page_Load(object sender, EventArgs e) { XDocument doc = XDocument.Load(Server.MapPath("~/XMLFile.xml")); if (doc != null) { XElement myElement = doc.Element("kullanicilar"); XElement addedElement = new XElement(new XElement("kullanici", new XElement("ad", "Esat"), new XElement("soyad", "Arslan"))); addedElement.SetAttributeValue("id", "5"); myElement.Add(addedElement); doc.Save(Server.MapPath("~/XMLFile.xml")); var myUsers = from t0 in doc.Element("kullanicilar").Elements("kullanici") select new { Ad = t0.Element("ad").Value, Soyad = t0.Element("soyad").Value, }; grdUserList.DataSource = myUsers; grdUserList.DataBind(); } }
Veri ekleme için ilk önce parent node'u seçtik. Daha sonra XElement sınıfından oluşturduğumuz nesneyi "Add()" metodunu kullanarak dosyaya ekledik ve kaydettik.
Veri Güncelleme
protected void Page_Load(object sender, EventArgs e) { XDocument doc = XDocument.Load(Server.MapPath("~/XMLFile.xml")); if (doc != null) { XElement myElement = (from t0 in doc.Element("kullanicilar").Elements("kullanici") where t0.Attribute("id").Value == "5" select t0).SingleOrDefault(); if (myElement != null) { myElement.SetAttributeValue("id", "100"); doc.Save(Server.MapPath("~/XMLFile.xml")); } var myUsers = from t0 in doc.Element("kullanicilar").Elements("kullanici") select new { ID = t0.Attribute("id").Value, Ad = t0.Element("ad").Value, Soyad = t0.Element("soyad").Value, }; grdUserList.DataSource = myUsers; grdUserList.DataBind(); } }
Linq cümlesi kullanarak "id" değeri "5" olan kaydı çektik, xml yapısında ID değerleri nitelik(attribute) olarak girildiği için "SetAttributeValue()" metodu ile değerini "100" olarak değiştirip dosyayı kaydettik.
Kolay gelsin...
