C# XML İşlemleri ve System.Xml

Merhaba arkadaşlar,

Bu yazımda XML Belgesi hakkında temel düzeyde bilgilenip, C# dili ile System.Xml isim alanında bulunan yapıları kullanarak XML belgelerini nasıl düzenleyeceğimizi ve XML belgesindeki bilgileri nasıl elde edebileceğimizi ele alacağız.

.Net Platformunda XML’nin (Extensible Markup Language) yani Genişletilebilir İşaretleme Dili önemi büyüktür. Hem Framework konfigürasyon dosyasının çoğu XML tabanlıdır hem de ADO.NET gibi büyük bir kütüphane XML ile iç içe çalışmaktadır. XML yeni neslin iletişim dilidir ve farklı platformların birbirleri ile haberleşirken bu dil kullanılıyor. Yani XML bu dil için haberleşme aracı olmuştur. Bu nedenle XML herhangi bir platforma bağlı kalmaması ve W3C standartları tarafından desteklenmesinin büyük payı vardır.

XML standart olmasından dolayı birçok uygulama alanı gelişmiştir. Farklı sistemler arası haberleşmeyi sağlayan Web Servisleri uygulama alanlarının en önemlisidir. Web Servisleri sayesinde İnternet protokolü dediğimiz HTTP üzerinden XML yardımıyla bir sunucudaki metodu çalıştırıp metodun geri dönüş değerini aradaki çeşitli katmanları kullanarak XML formatında elde edebiliriz.

XML bir programlama dili değildir. XML belgelerini biçimlendirilmiş metin tabanlı veri depolama işine yarayan belgeler şeklinde nitelendirebiliriz. Veritabanı sunucuları henüz piyasa yokken metin tabanlı bilgi saklama yöntemleri kullanılırdı.

XML Belgeleri

Basit bir XML dosyası yapısı

XML belgesinde her veri, kapanan ve açılan etiketler arasında yazılmıştır. Belgenin ilk satırında çeşitli bildirimler yapılmaktadır.

Her XML dosyasının mutlaka bir kök elemanı vardır. Yukarıdaki örnekte kök eleman

Kök elemanı olmayan bir XML belgesi geçerli değildir. Diğer bütün elemanlar kök elemanın içinde bulunur. Tıpkı bir ağaç yapısı gibi.

foods etiketinde 2 ayrı menuden oluşmaktadır. menu etiketinde de 3 ayrı elemandan oluşmaktadır.

menu etiketinde “name” isminde bir niteliği vardır. Bu niteliğin değeri ise “Day-1”, “Day-2” şeklindedir.

Yukarıdaki XML belgesinin İnternet tarayıcısında görünümü aşağıdaki gibidir.

System.Xml İsim Alanı

XML belgeleri üzerinde işlem yapmak için geliştirilmiş sınıflar System.XML isim alanında bulunur. Bu isim alanında birçok sınıf vardır.

XmlReader: XML belgelerinden verileri okumamız için tasarlanmış bir sınıftır. Tamponlama mekanizması ile çalışmaktadır ve sadece ileri yönlü okuma yapabilir.

XmlWriter: Bir akıma ya da dosya sistemine XML verilerini kaydetmek için kullanılır. (Sadece ileri yönlü okuma yapabilir)

XmlTextReader: XML belgelerinden sadece ileri yönlü okuma yapabiliyor ve XML belgelerine bir akım gibi (stream) erişmemizi sağlar

XmlTextWriter: XML akımlarını dosya sisteminde oluşturmak için kullanılır.

XmlNode: XML belgesindeki tek bir düğümü ifade etmek için kullanılır.

XmlNodeReader: Bu sınıf okumak için bir düğüm noktasını kaynak olarak alır.

XmlDocument: Bir XML belgesinin belleğe bir ağaç gibi yüklenmesini ve bu ağaç üzerinde çeşitli işlemler yapabilmesini sağlar.

Hazırladığımız XML belgesini okuyup düğümlerle ilgili çeşitli bilgiler eden program:

Programdan çıktısına baktığımızda .xml uzantılı dosyamızda bütün elemanların adı ve sahip oldukları nitelikleri yazdırabildik. XmlTextReader sınıfının Name özelliği ilgili düğümün etiket ismi, Value özelliği ise ilgili düğümün değerini vermektedir. Düğümlerde eleman olmak zorunluluğu yok bu yorum satırı da olabilir veya komut bildirimi de.

System.Xml isim alanında bulunan XmlNodeType numaralandırıcı türündendir ve bir özelliği de Element’tir. Diğer semboller ise;

AttributeCDATAComment
DocumentDocumentFragmentDocumentType
ElementEndElementEndEntity
EntityEntityReferanceNone
NotationProcessingInstructionSignificiantWhitespace
TextWhitespaceXmlDecleration

Programlama yoluyla XML dosyalarını oluşturmak için XmlTextWriter sınıfını kullanıyoruz.

Oluşturduğumuz XML Belgesinin son hali

DOM (Document Object Model)

XmlDocument sınıfı ile W3C’nin DOM denilen modelini destekleyen XML yapısını kullanbiliriz. XmlDocument sınıfı ile bir Xml belgesi belleğe yüklenir ve bir DataSet gibi üzerinde işlemler yapılıp tekrar Xml belgesine güncelleme yapılır. XmlDocument ile XML belgesi sisteme bir ağaç şeklinde yüklenip çeşitli sınıflar yardımı ile her bir düğüm (element) elde edilip üzerinde işlemler yapılabilir.

XmlDocument ile çalışıldığında sıkça kullanılan iki sınıf; XmlElement ve XmlAttribute sınıflarıdır. Bu sınıflar sırasıyla elemanı ve niteliği temsil etmek için kullanılır. XmlDocument nesnesini oluşturabilmek için için bir yol veya akım (stream) gereklidir. XmlDocument nesnesi bellekteki verileri temsil etmektedir. XmlDocument nesnesine XML belgesini yükleyebilmek için de XmlTextReader sınıfına ihtiyacımız olacak.

Sık Kullanılan XmlDocument sınıfının metot ve özellikleri:

Attributesİlgili düğüme ilişkin bir nitelik koleksiyonu döndürür. Bu koleksiyon türü XmlAttributeCollection‘dır
ParentNodeBir düğüme ilişkin XmlNode sınıfı ile ilişkilendirilmiş ana düğümü verir
HashChildNodesEğer ilgili düğüm başka yavru düğüm (child node) içeriyorsa true değerini verir.
FirstChildİlgili düğüme ilişkin ilk yavru düğümü XmlNode türünden verir.
LastChildİlgili düğüme ilişkin son yavru düğümü XmlNode türünden verir.
ChildNodesİlgili düğüme ilişkin yavru düğümleri bir XmlNodeList türünde verir.
NextSiblingÜzerinde çalışılan düğümün hemen sonrasındaki düğümü verir
PreviousSiblingÜzerinde çalışılan düğümün hemen öncesindeki düğümü verir.
InnerTextBir düğüm içerisinde yavru düğümleri ve varsa bu düğümlerin değerlerini verir.
InnerXmlBir düğüme ilişkin verileri ve yavru düğümleri XML etiketleri ile beraber string türünde verir
OuterXmlBir düğüme ilişkin bilgileri XML etiketleri ile beraber string türünden verir. Bu özellikte yavru düğüm alınmaz!
NameBir düğümün ismini verir
ValueBir düğümün değerini verir
NodeTypeDüğümün hangi tipte olduğunu XmlNodeType numaralandırması ile verir

XmlDocument sınıfının kullanımına örnek bir uygulama

Bu yazımda System.Xml isim alanında bulunan yapılarla birlikte XML belgelerini kullanmaya çalıştık. System.Xml isim alanı ile ilgili edindiğim bilgileri paylaşmaya çalıştım . Umarım faydalı olmuştur 🙂

Bir sonraki yazımda görüşmek dileğiyle

Kaynaklar:

Her Yönüyle C# 7.0, Sefer Algan, Pusula Yayincilik

https://docs.microsoft.com/en-us/dotnet/api/system.xml?view=netframework-4.8

Leave a Comment