C# XML CRUD

Extensible Markup Language (Genişletilebilir İşaretleme Dili). Tanımını yaparsak birçok yazılımın birbirleri arasında , data(veri) alış verişi sağlayan bir işaretleme dilidir.Fazla detaya girmeden hemen bir kaç avantajından bahsedip kod kısmına geçicem.

Avantajları

  • Bağımsız bir dildir. Her platformlarda çalışabilir.
  • Neredeyse tüm web servislerinde kullanılır.
  • Tüm programlar XML desteği sunmaktadır.
  • Öğrenilmesi kolay ve kullanışlı bir dildir.

.. Örnek bir XML Yapısını görelim.

Kök - Root 

Her XML mutlaka olması gereken bir elementir.

XML dökümanın köküdür.

Ve sadece bir Kök bulunabilir.

Veritabanını temsil etmektedir.

Düğüm - Node 

Kökler mutlaka Node elementi içermelidir.

Veritanımızın tabloları temsil etmektedir.

Çocuk - Child

Veritanımızındaki tablomuzun sütünlarını ifade etmektedir. Hepsi bir araya geldiğinde veri satırını oluşturmaktadır.

... Şimdi örnek bir XML CRUD işlemi yapan bir uygulama yapalım.

VS mizden Web-> Aspnet App -> Empty yeni bir proje oluştuyoruz. Ve oluşturduğumuz projemizde Add -> New item -> XML File dosyası ekliyoruz. Ve yukarıdaki resimde de gördüğünüz gibi bir XML yapısı oluştuyoruz

//Global Değişkenlerimiz Tanımlıyoruz
XmlDocument xmlDoc;
string file = "";
//XML Listele Metodumuz
public void XmlList(){
list_xml.Items.Clear();
//Dokumanımızın yolu
XPathDocument xp = new XPathDocument(file);
//Bir navigator oluştuyoruz
XPathNavigator xn = xp.CreateNavigator();
//Sorgumuzu yazıyoruz ve neye gelmesini istiyorsak 
//Kokden başlayıp child a doğru yazıyoruz
string select = "Kullanicilar/Kullanici/Ad";
XPathExpression xe = xn.Compile(select);
XPathNodeIterator xni = xn.Select(xe);
while (xni.MoveNext())
{
    //Ve Listimize kullanıcı adlarını ekliyoruz
    list_xml.Items.Add(xni.Current.ToString());
}

Page Loadımız..

//İlk defa / İşlem yapılmışsa kontrolü
if (IsPostBack)
return;
//Dropdownlist / Cinsiyet Doldurulması
dropList_cinsiyet.Items.Add("Erkek");
dropList_cinsiyet.Items.Add("Kadın");
file = Server.MapPath("~/Kullanicilar.xml");
//Listele Metodunu Çağıralım.
XmlList();

SeletedIndexChanged Evetımızı yazıyoruz. Seçim yaptığımızda TextBox mızın dolmasını sağlayacağız.

xmlDoc = new XmlDocument();
file = Server.MapPath("~/Kullanicilar.xml");
//XML imizi yüklüyoruz
xmlDoc.Load(file);
//Nodemızı seçiyoruz
//Ve burada neye göre seçeğimizi belirtiyoruz listboxa adları getirmistik
//adlara göre getirmesini isteyelim tekrardan
XmlNode selected = xmlDoc.SelectSingleNode("Kullanicilar/Kullanici[Ad='" + list_xml.SelectedItem.Text + "']");
//Gelenleri Textboxımıza ekliyoruz
txt_ad.Text = selected["Ad"].InnerText;
txt_soyad.Text = selected["Soyad"].InnerText;
txt_eposta.Text = selected["Eposta"].InnerText;
//Dropdownlistimiz için küçük bir if
if (selected["Cinsiyet"].InnerText == "Erkek")
{
    dropList_cinsiyet.SelectedIndex = 0;
}
else { dropList_cinsiyet.SelectedIndex = 1; }

Ekleme butonumuzun kodları.

xmlDoc = new XmlDocument();
file = Server.MapPath("~/Kullanicilar.xml");
//Ekleme işlemini 
//XML imizi yüklüyoruz
xmlDoc.Load(file);
//Yeni bir element eklediğimiz için 
//Yeni bir element oluştuyoruz
XmlElement xe = xmlDoc.CreateElement("Kullanici");
XmlNode ad = xmlDoc.CreateNode(XmlNodeType.Element, "Ad", null);
XmlNode soyad = xmlDoc.CreateNode(XmlNodeType.Element, "Soyad", null);
XmlNode cinsiyet = xmlDoc.CreateNode(XmlNodeType.Element, "Cinsiyet", null);
XmlNode eposta = xmlDoc.CreateNode(XmlNodeType.Element, "Eposta", null);

//Textboxdaki verilerimizi elementlere atıyoruz
ad.InnerText = txt_ad.Text;
soyad.InnerText = txt_soyad.Text;
cinsiyet.InnerText = dropList_cinsiyet.SelectedItem.Text;
eposta.InnerText = txt_eposta.Text;
//Child olarak elementimize ekliyoruz
xe.AppendChild(ad);
xe.AppendChild(soyad);
xe.AppendChild(cinsiyet);
xe.AppendChild(eposta);
//Oluşturduğumuz kullanıcı yı element /bir butun haliyle ekliyoruz
xmlDoc.DocumentElement.AppendChild(xe);
//Docmuzu kayıt ediyoruz
xmlDoc.Save(file);  
//Hemen Listeleme İşlemi yapsın
XmlList();
//Formumuzu temızleyelım
FormClear();

Güncelleme butonumuzun kodları;

if (txt_ad.Text == "" && txt_soyad.Text == "" && txt_eposta.Text == "")
{
    System.Web.HttpContext.Current.Response.Write("alert('" + "Lütfen Bol alan bırakmayınız" + "')");
}
else
{
    xmlDoc = new XmlDocument();
    file = Server.MapPath("~/Kullanicilar.xml");
    //XML imizi yüklüyoruz
    xmlDoc.Load(file);
    //Nodemizi seçiyoruz
    XmlNode selected = xmlDoc.SelectSingleNode("Kullanicilar/Kullanici[Ad='" + list_xml.SelectedItem.Text + "']");
    //Gelenleri verileri güncelliyoruz
    selected["Ad"].InnerText = txt_ad.Text;
    selected["Soyad"].InnerText = txt_soyad.Text;
    selected["Eposta"].InnerText = txt_eposta.Text;
    if (dropList_cinsiyet.SelectedIndex == 0)
    selected["Cinsiyet"].InnerText = "Erkek";
    else
    selected["Cinsiyet"].InnerText = "Kadın";
    //Güncellenmiş Halini kaydediyoruz
    xmlDoc.Save(file);
    //Listeleyelim
    XmlList();
    //Formu Temizleyelım
    FormClear();
}

Ve son olarak da silme butonumuzun kodları;

if (txt_ad.Text == "")
{
    System.Web.HttpContext.Current.Response.Write("alert('" + "Lütfen Bir Seçim Yapınız" + "')");
}
else
{
    xmlDoc = new XmlDocument();
    file = Server.MapPath("~/Kullanicilar.xml");
    //XML imizi yüklüyoruz
    xmlDoc.Load(file);
    //Nodemizi seçiyoruz
    XmlNode selected = xmlDoc.SelectSingleNode("Kullanicilar/Kullanici[Ad='" + list_xml.SelectedItem.Text + "']");
    //Gelenleri verileri siliyoruz
    xmlDoc.DocumentElement.RemoveChild(selected);
    //Güncellenmiş Halini kaydediyoruz
    xmlDoc.Save(file);
    //Listeleyelim
    XmlList();
    //Formu Temizleyelım
    FormClear();
}

Ben basit olarak XML üzerinde CRUD işlemi yapan bir uygulama yaptım. Projeye Bu Linkden ulaşabilirsiniz.

Seçme işlemimiz;

Güncelleme işlemimiz;

Silme işlemimiz;