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...