XML(eXtensible Markup Language)in özellikle web uygulamalarında sık sık kullanılması ve hızla gelişmekte olan ve geleceğin teknolojisi olarak adlandırılan Web servislerin temelini oluşturması nedeni ile .Net teknolojisinde çok önem taşımaktadır.

XML belgeleri görsel olarak şekillendirilmiş metin dosyalarıdır.Var olan sıralı dosya formatında farklı değildir. Bir xml belgesi düğümler ağacından oluşur. Her düğümde bir öğe, nitelik açıklama, işlem talimatı veri tipi(CDATA) bölümlerinden oluşmaktadır. Fakat bir xml belgesi belli kurallara uyan işaretler içerir. Bu nedenle normal bir metin dosyasından ayrılır. .Net netkonolojisi görünümde kolay görünen fakat ayrıştılması zor olan bu dosyaları okumak, kullanımını kolaylaştırmak , işlevselliğini artırmak için System.XML kütüphanesini oluşturmuştur.


.Net te doğru tanımlanmış bir xml belgesinde veri okumak, değiştirmek, verilerin konumlarını bulmak için en sık kullanılan nesne XmlDocument nesnesidir. XmlDocument nesnesinin en büyük avantajı okuduğu xml belgesini belleğe bir kez yükledikten sonra belgeyi defalarca kullanmaya izin vermesidir. Ayrıca XmlDocumentin içerisinde bulunan bilgiyi diğer formatlara çevirmeyi, düğüm ve değerler arasında hızla ilerlemeyi ve var olan değerlere çabuk ulaşmayı sağlar. XML belgesinin bellekte gösterimini sağlamak için Belge Nesne Modeli (Document Object Model DOM) sınıfları kullanılır.

Bugünkü makalemizde ağırlıkı olarak XmlDocument nenesi üzerinde duracağız. Bir xml belgesinde tutulan kayıtlara okuma, kayıtları gösterme , değiştirme ve silme gibi işlemler yapacağız. Ben kullandığım xml belgesinin yapısını okunması ve işlenmesi daha rahat olduğu için elemet element değilde attribute halinde tutmayı tercih ettim.

Not:Bu makaleyi daha iyi anlamak için xml ve yapısını azda olsa bilmeniz gerekmektedir. Bu yüzden öncelikle sitemizde xml ile ilgili yazılmış olan makaleleri okumanız çok daha iyi olacaktır.

Örneğimizde kullanacağımız xml belgesi.

Şekil 1 : XML belgesinin yapısı,

Yapacağımız örnek için ekran tasarımını aşağıdaki gibi olsun. XML belgesindeki bilgileri datagridte listeleyecek, ekleme ,silme ve güncelleme işlemlerini gerçekleştirecek.

Şekil 2 : Ekran görüntüsü,

İlk kod parcası kullanacağımız nesnelerin tanımlanması ve xml belgesinin okunması olacak. XmlDocument nesnesinin Load metodu ile ilgili dosyamızı yüklüyoruz. Load metodunu dört farklı aşırı yüklenmiş metodu mevcutur. Uygulamın yapısına ve elimizde mevcut olan nesnelere göre uygun metodu seçebiliriz. Şuan basit olarak dosyanın yolunu vererek XmlDocument nesnesini dolduracağız.

private XmlDocument myDoc = new XmlDocument();

private DataSet myDs;

private XmlElement myElement;

private void LoadXML() {

myDoc.Load(”myXML.xml”); //xml belgesinin xmldocument nesnesine yüklenmesi

}

Kod1 : XML belgesinin xmldocument nesnesine yüklenmesi

İkinci kod örneğimiz ilgili xml belgesindeki bilgilerin datagridte listelenmesi. Bunun için DataSet nesnesinin ReadXml metodundan faydalanacağız.

private void LoadDataGrid() {

myDs = new DataSet();

myDs.ReadXml(”myXML.xml”); //xml belgesinin dataset nesnesi tarafından okunması

dataGrid1.DataSource = myDs.Tables[0];

}

Kod2 : XML belgesinin okunup dataset nesnesine yüklenmesi

Xml belgesindeki bilgilerin datagritte listelenmesi.

Şekil 2 : Xml belgesindeki verilerin listelenmesi

Makalede sık kullanacağımız bir kaç terimin açıklamsını yapalım.

XmlNode: Xml belgesinde bulunan düğümleri temsil eder.

XmlAttribute :Xml belgesinde bulunan bir düğüme ait nitelik bilgilerini temsil eder.

Aşağıda bulunan kod örneği mevcut XmlDocument nesnesinde bulunan bir düğümden işlem yapmak için eleman oluşturmak. XmlEleman nesnesinin GetAttribute metodu ilgili düğümün içinde bulunan niteliklerdeki verileri almak için kullanılır.

private void dataGrid1_Click(object sender, System.EventArgs e) {

RowNumber = dataGrid1.CurrentCell.RowNumber;

myElement = (XmlElement)myDoc.DocumentElement.ChildNodes[RowNumber];

txtADI.Text = myElement.GetAttribute(”ADI”);

txtBOLUM.Text = myElement.GetAttribute(”BOLUM”);

txtSOYADI.Text = myElement.GetAttribute(”SOYADI”);

txtKODU.Text = myElement.GetAttribute(”KODU”);

}

Kod3 : Xmldocumet nesnesindeki bir düğümden eleman oluşturma ve elemanda buluna bilgilerin okunması

Yeni bir xml düğümünün oluşturulması için öncelikle var olan belgemizde istenilen düğümün CreateNode metodu ile oluşturulması gerekir. XmlNodeType seçeneklerine göre oluşturmak istediğiniz düğümün yapısını belirleyebilirsiniz. XmlNodeType�ı XmlElement olarak oluşturulun XmlNodun ilgili niteliklerine değerleri atamak için SetAttribute metodundan faydalanacağız. Aşağıdaki örnek kodumuzda yeni bir düğüm(node) oluşturduk ve XmlDocument nesnesine ekledik. XmlDocument nesnesi üzerinde yapılan değişikliklerden sonra xml belgesini güncellenmesi için XmlDocument nesnesinin Save metodu kullandık.

private void btnKaydet_Click(object sender, System.EventArgs e) {

try {

if(RowNumber == 0) {

XmlNode newNode = myDoc.CreateNode(XmlNodeType.Element,”EDITOR”,”"); //Yeni bir düğümün oluşturulması

myDoc.DocumentElement.AppendChild(newNode); // Oluşturulan düğümün belgeye eklenemsi

myElement = (XmlElement)newNode; }

else

myElement = (XmlElement)myDoc.DocumentElement.ChildNodes[RowNumber];

myElement.SetAttribute(”KODU”,txtKODU.Text);

myElement.SetAttribute(”ADI”,txtADI.Text);

myElement.SetAttribute(”SOYADI”,txtSOYADI.Text);

myElement.SetAttribute(”BOLUM”,txtBOLUM.Text);

myDoc.Save(”myXML.xml”); //xml belgesinin güncellenmesi

LoadDataGrid();

} catch(XmlException ex) { MessageBox.Show(ex.Message);

}

}

Kod4 : Xmldocumet nesnesindeki yeni düğüm ekleme ve düğümün niteliklerine veri kaydetme.

Son kon örneğimiz de bir XmlDocument nesnesinden bir düğümü silmek. Düğüm silmek için hangi düğüm sileceğinizi seçmenizi tanımladıktan sonra RemoveChild metodu ile silebilirsiniz.

private void btnSil_Click(object sender, System.EventArgs e) {

XmlNode myNode = myDoc.DocumentElement.ChildNodes[RowNumber];

myDoc.DocumentElement.RemoveChild(myNode); //

myDoc.Save(”myXML.xml”);

LoadDataGrid();

}

XmlDocument nesnesinin bu kadar avantajı yanı sıra dezavantajları da mevcuttur. Çünkü bir xml belgesi Xml Document nesnesine yüklendikten sonra kullanılan xml belgesini boyutunun iki üç misli fazlası bellekte yer kaplamaktadır.

Favorilerinize Ekleyin.
  • BlinkList
  • del.icio.us
  • Digg
  • Netvouz
  • DZone
  • ThisNext
  • MisterWong
  • Wists
  • blogmarks
  • Furl
  • Netscape
  • NewsVine
  • Reddit
  • Shadows
  • Technorati
  • YahooMyWeb
  • Fark
  • feedmelinks
  • Fleck
  • kick.ie
  • LinkaGoGo
  • Linkter
  • MyShare
  • Spurl
  • Webride