Kaynak : MSAKADEMİK

Bu makaleyi okuduktan sonra; 

  • XMLReader sınıfının altsınıflarını kullanarak dosyadan XML okuyabileceksiniz.
  • XMLReader sınıfının alt sınıflarının XMLTextReader, XMLValidatingReader ve XMLNodeReader olduğunu öğreneceksiniz.
  • Bu alt sınıfların hangi durumda hangisinin kullanılacağını bileceksiniz

Önbilgi: Temel XML bilgisi

Bir dosyadan XML bilgiyi iki farklı sekilde okuyabilirsiniz; birincisi direkt dosyadan satır satır okuyarak, ikincisi ise tüm dosyayı hafızaya alıp okuyarak.
Birinci durumda, yani satır satır okumak için, XMLReader sınıfını kullanıyoruz. Bu sınıfla hızlı, depolamadan, sadece ileriye dogru (fast, non-cached, forward-only) okuma yapılır. Dosyanın birinci satırından baslayarak okumaya baslar ve asagıya, dosyanın sonuna kadar devam eder. Tıpkı ADO.NET'teki DataReader gibi.

 

XMLReader'ın birkaç önemli altsınıfları vardır. Zaten XMLReader, DataReader gibi bir soyut(abstract) sınıftır. Dolayısıyla new kelimesiyle oluşturulmaz. Onun yerine alt sınıfları kullanılarak oluşturulur. Bu sınıfın nasıl oluşturulduğuna geçmeden alt sınıflarından bahsetmek istiyorum. Bunlar XMLTextReader, XMLValidatingReader ve XMLNodeReader' dır.  Aşağıdaki tabloda XMLReader altsınıfları ve hangi durumlarda kullanıldığı belirtilmiştir.

Senaryo

Kullanılacak Reader

Performans çok ön plandaysa, DTD(Document Type Definition) ve Şema(Schema)'ya ihtiyaç duyulmuyorsa

XMLTextReader

Xml dosyasının düzgün-yapılı(well-formed) olması gerekiyorsa

XMLTextReader

Xml dosyasının DTD' ye göre geçerli(valid) ve düzgün-yapılı olması gerekiyorsa

XMLValidatingReader

Xml dosyasının belli bir şemaya göre geçerli(valid) ve düzgün-yapılı olması gerekiyorsa

XMLValidatingReader

Xml dosyasının düzgün-yapılı olması  ve XmlNode'a göre okunması gerekiyorsa

(XmlNode: xml dosyasında <x>ile</x> dahil arada kalan hereşeye denir. )

XMLNodeReader

 

Bu arada küçük bir not; XMLTextReader ve XMLValidatingReader sınıfları en fazla 2 gigabyte'lık dosyaları okuyabiliyor. Eğer dosyanız daha büyükse bir kaç parçaya bölmeniz performans açısından daha iyi olur.

Asagıdaki gibi bir XML dosyasının oldugunu düsünün. Adı Employees.xml olsun.

<?xml version="1.0"?> <Root> <Employees> <EmployeeID>1</EmployeeID> <LastName>Davolio</LastName> <FirstName>Nancy</FirstName> </Employees> </Root>

Yukarıdaki xml dosyasında ilk satır tanımlama satırıdır. <Root> elementi kök elementidir. xml dosyaları için olmazsa olmazlardan biri de kök elmentinin olmasıdır. Başlangıç elementi de denir. <Employees> de bir elementtir. Elementlere aynı zamanda Node da denir. Node  kelimesini Türkçeye çeviremedim. Artık güzel bir bilişim sözlüğü çıkana kadar nacizane bendeniz elminden geldikçe daha iyi anlaşılması için Türkçe'ye çevirmeye çalışacağım. Çeviremediklerim için affınıza sığınıyorum.  <Employees> ile</Employees>  arasındaki elementlere ChildNode denir. Yani <Employees> elementinin çocukları oluyor.

Şimdi de yukarıdaki xml dosyasından yazıları alacak kodu yazalım. Bunun için bu bilgilere uygun bir arayüz oluşturalım. Arayüz aşağıdaki gibi olabilir


 

Kodun sadece button1_Click olayındaki kısmını buraya koyuyorum. Çünkü geri kalan kısmı Developer kendisi oluşturuyor. Ayrıca makalenin sonunda kodun tamamının zipli halini indirebileceğiniz bir link verceğim.

(Not:en başa using System.XML yazmayı unutmayın) private void button1_Click(object sender, System.EventArgs e) { XmlTextReader reader = new XmlTextReader(@"Employees.xml"); while(reader.Read()) { if(reader.NodeType == XmlNodeType.Element) { if(reader.Name.Equals("EmployeeID")) { textBox1.Text = reader.ReadString(); } else if(reader.Name.Equals("LastName")) { textBox3.Text = reader.ReadString(); } else if(reader.Name.Equals("FirstName")) { textBox2.Text = reader.ReadString(); } } } reader.Close(); }

Şimdi kodu satır satır inceleyelim:
Birinci satırda reader adında XMLTextReader sınıfından bir örnek oluşturuyoruz. Parametre olarak da xml doyasının bulunduğu URL yi string olarak alıyor. Eğer xml dosyası C sürücüsünün altında olsayıdı o zaman parametre olarak (@"C:\Employees.xml") yazacaktık. Bu dosya şu an bin/degub/Employees.xml de olduğu için sadece ismini yazdık.

Ikinci satırda bir while dögüsü oluşturuyoruz. reader.Read() koşulu doğru değerini döndürdüğü sürece yani dosyanın sonuna kadar döngü devam eder.  Dögünün içinde bir if cümlesi görüyorsunuz. Eğer node tipi elementse işlemler yapacak. Daha sonra elementin adına göre textbox'lara readString() methoduyla elementlerin içindeki bilgileri yazacak.

Son olarak, işimiz bittikten sonra reader.Close() ile reader'ı kapatıyoruz.


Programı Çalıştırıp "XML'den oku (button1)" düğmesine bastığımızda xmlden bilgileri başarıyla okumuş oluyoruz.


 

 

Gelecek makalelerde XML ile oynamaya devam edeceğiz.

kodun zipli halini buradan indirebilirsiniz.

Etiketler : Etiket Yok
Kategoriler : Visual Studio
Yorumlar : 0 Yorum Yorum Yaz

Yorumlar

Yorum Eklenmemiş...

Yorum Yaz

Adınız: *
E-Mail Adresiniz: *
Web Sitesi:
Yorum: *
Güvenlik Kodu: *
 
Arama
  Ara
Dil Seçin
Sayfalar
Son Yorumlar
Sayfalar
Blog Sayaç
Tag Bulutu