Makale Özeti

En önemli teknolojilerden biri olan XML ve kullanımı üzerine örnekler

Makale

   Herkese Merhaba
   Bu makalede Microsoft.Net platformu üzerinde C# Dilini kullanarak Xml dökümanlarının nasıl okunduğunu ve yazıldığını anlatmaya örneklerle anlatmaya çalışacağım.
   Öncelikle kısa bir şekilde Microsoft .Net Framework librarysini ele alalım. Bu library çok gelişmiş namespace ve classlardan oluşuyor. (Eğer name space yada class da ne diyorsanız, önce diğer C# ve .Net Framework makalelerini okumanızı öneririm.)
Bu makalede .NetFramework üzerinde bulunan Xml namespace ve class ları ile çalışacağız. Bu makale bittiğinde Xml.NET ve ADO.NET hakkında daha fazla bilgiye sahip olacaksınız.
   .Net Framework altında Xml dökümanları ile çalışmanız için .Net Framework Runtime Libraryi biraz olsun kavramanız gerekiyor. Net Framework Runtime Library si içinde Xml hizmetini bize 5 namespace sunuyor.


      System.Xml
      System.Xml.Schema
      System.Xml.Serialization
      System.Xml.XPath
      System.Xml.Xsl
      .......................


   System.Xmlinden major Xml namespacei olarak söz edebiliriz. Bu name space Xml dökümanlarını okuma ve yazma işlemleri için içerisinde farklı classlar barındırıyor, tabi herbirinin işlevleri ayrı. Bunlar kısaca;


      XmlReader
      XmlTextReader
      XmlValidatingReader
      XmlNodeReader
      XmlWriter
      XmlTextWriter


   Dikkat ederseniz bu classlar içerisinde 4 okuyucu class ve 2 yazıcı class mevcut. Xml dökümanı okurken temel genel olarak XmlReader classı kullanılır sebebi, Xml dökümanını okuyabilmek için içerisinde çeşitli metodlar ve özellikler barındırması, MoveToAttribute, MoveToFirstAttribute, ReadString, ReadOuterXml.. gibi. Bunlar aşağıdaki örneklerde bolca kullanacağımız özelliklerden sadece bazıları. XmlWrite classı ise Xml dökümanlarına ve Xml dökümanlarındaki elemanlara yazabilmek için yazma işlevini gerçekleştiren bazı metodlara sahiptir.

   System.Xml.Schema ise Xml Schemaları ile çalışmayı uygun kılar ve XmlSchema, XmlSchemaAll, XmlSchemaXPath, XmlSchemaType gibi metodları kullanıma sunar.
   System.Xml.Serialization classının taşıdığı metodlar ve özellikler sayesinde ise rahatlıkla stream Xml dökümanları ile uğraşmanıza olanak sağlanmakta.
   System.Xml.XPath classı  ile ise Xml dökümanları ve Node ları arasında rahat bir gezintiye çıkabilirsiniz.  
   System.Xml.Xsl ise benim gibi .Net Framework teknolojisi çıkmadan önce XSL/T transformasyon işine çok kasmış kişilerin hayatını bir anda kolaylaştırabilecek nitelikte.

   Bu kadar felsefe yeter örneklere geçelim diyenleri duyabiliyorum sanki ( eh; hadi ozaman geçelim ). İlk olarak Xml dökümanımızı oluşturalım ne dersiniz ?.
O zaman örnek bir xml yapısı oluşturalım. Biraz sıkıcı olacak ama hem basitliği hemde öğreticiliği nedeniyle basit bir adres defteri xml yapısı oluşturalım.

adefteri.xml

<?xml version=1.0?>
      <telefondefterim>
            <kisi id="1">
                  <Isim>Fatih YAŞAR</Isim>
                  <Telefon>0542 3452521</Telefon>
                  <Meslegi>Software Developer</Meslegi>
            </kisi>
            <kisi id="2">
                  <Isim>K.Mustafa Öztürk </Isim>
                  <Telefon>0532 1444444</Telefon>
                  <Meslegi>Software Developer</Meslegi>
            </kisi>
            <kisi id="1">
                  <Isim>Özkan Erener </Isim>
                  <Telefon>0532 1444444</Telefon>
                  <Meslegi>Patronum</Meslegi>
            </kisi>
</telefondefterim>

XML Dökümanını Okuyoruz
Çalıştığım folder <root>:\adefteri şeklinde ve oluşturacağımız örnek uygulamada bu Xml dökümanını kullacağız.Gelin önce bu Xml dökümanındaki dataları okuyalım. Tabi bunun için XmlTextReader metodunu kullanacağız. XmlTextReader, XmlNodeReader ve XmlValidatingReader metodları XmlReader classı altında yer alıyor ve herbirinin işlevi farklıdır.( Bunu da burada belirtmek istedim ). İşte ilk kod satırımız:
     XmlTextReader myReader = new XmlTextReader("C:\\adefteri\adefteri.xml");

Burada yaptığımız şey basit aslında XmlTextReaderı kullanarak myReader diye bir örnek obje oluşturuyoruz, tabi bu esnada XmlTextReader constructoruna Xml dökümanımızın bulunduğu pathi parametre olarak geçiriyoruz. XmlTextReader örneği yaratıldıktan sonra Read metodunu kullanarak rahatlıkla bu dökümanı okuyabiliriz. Tabi okuduktan sonra XmlTextReaderin Name, BaseURI, Depth, LineNumber metodlarını kullanarak bu döküman üzerinde istediğimiz bilgilere rahatlıkla ulaşabiliriz.

işte ilk örnek :


çalıştırın bakalım ne olacak.
Ne oldu bir sürü çıktı geldi ekrana değilmi ? :). Bu da ne şimdi demeyin; hemen basitçe açıklayalım, programı çalıştırdığınızda karşınıza çıkan çıkktılar Xml dökümanının içeriği ve içerik tipleri hakkında bizi yeterince bilgilendiriyor. Buradaki en önemli alanlardan birisi Nodetype . Bu alandaki çıktı bize döküman içerisinde kullanılan tag hakkında bilgi veriyor. Örneğin : bir alanın Attribute, CDATA, Element, Comment, Document, DocumentType, Entity, ProcessInstruction, WhiteSpace olup olmadığını anlayabilirsiniz.

işte ikinci örnek :


Şimdi diyeceksiniz ki ben ne yapayım diğer özellikleri v.s. sadece birinci programda sadece Xml dökümanının value larına ihtiyacınız olursa sadece myReader.Value.ToString() yazamanız yeterli olacaktır. Bu kadar okumak yeterli sanırım. Birazda Xml dökümanının içerisine yazalım. Adres defterimiz 3 kişiden oluşacak değil ya birilerini kaydetmek iyi olur .

XML Dökümanına yazıyorum
Bu bölümde XmlReader in kardesi XmlWriter ile çalışacağız. XmlWriter classı Xml dökümanlarına üzerinde gelişmiş bir işlevselliğe sahiptir. Yine bizim kullanacağımız XmlTextWriter and XmlNodeWriter class ları XmlWriter base class olarak almaktadır ve yine bu class lar Xml dökümanına yazma işlemleri için metodlar ve özellikler taşımaktadır. Örneğin : WriteNode, WriteString, WriteAttributes, WriteStartElement, and WriteEndElement metod ve özellikleri ile istediğimiz yapıya sahip bir Xml dökümanı oluşturmamız mümkün.

Xml dökümanı oluşturma aşamasında C# diliniz baz alıp düşünmeye başlarsak, önce XmlTextWriterın bir örneğini oluşturmamız gerekir. XmlTextReader da olduğu gibi path ve dosya ismini string olarak geçirmemiz gerekecek, ancak geçirdiğimiz string haldeki dosya ismini oluşturmak istediğimiz dosya ismi şeklinde geçirmeliyiz. Örneğin : C:\\ rootum olsun ve burada newadres.xml adlı bir Xml dökümanı oluşturmak istiyorum. Bu durumda XmlTextWriter örneğini çıkartırken XmlTextWriter("C:\\newadres.xml"); şeklinde yeni oluşturacağım Xml dökümanının adını geçiriyorum. Yanda geçirdiğim Null değeri ise System.Text.Encoding seçeneğinin boş olmasını istediğimi anlatmaya yarıyor. Yaramasaydı encoding typeını yazmamız gerekirdi buraya.

     XmlTextWriter myWriter = new XmlTextWriter("C:\\adefteri\newadefteri.xml", Null);

XmlTextWriterın bir örnmeğini myWriter olarak yaratmamın hemen ardından WriterStartDocumentı çağırmam gerekiyor ki yazmaya başlayabileyim.

      myWriter.WriteStartDocument();

      ………..
      Rutin yazma işlemleri
      ………..

      myWriter.WriteEndDocument();

      myWriter.Close();

WriteStartDocument ve WriteEndDocument özellikleri Xml dökümanına yazma işlemini başlyıp bitirdiğimizi haber vermemiz için kullanmamız gereken özellikler. Close() ise nedir diyen gözüme gözükmesin : )

WriteComment metodu ile Xml dökümanımıza açıklamalar ve notlar eklememizi sağlar ( Bkz gitiğimiz yerlere ekmek kırıntıları atmak. ) yine WriteString metodu adından da anlaşıldığı gibi dökümanın içerisine string değerleri yazmamızı sağlıyor. WriteStartAttribute ve WriteStopAttribute özellikleri arasında elementin içerisine attribute değerler yazmamız sağlanıyor.

Haydi bir örnek yapalım diyenleri duyuyor gibiyim.

işte üçüncü örnek :


oluşturduğumuz dökümana bir bakalım:
<?xml version="1.0"?>
<!--Bu bizim Xml dökümanına ilk yazma girişimimiz-->
<!--Dökümanın rootunu kendimize ayırdık.-->
      <telefondefterim>
            <kisi id="4">
                  <Isim>Leonard</Isim>
                  <Telefon>+90021111122222222</Telefon>
                  <Meslegi>Şarkıcı</Meslegi>
            </kisi>
</telefondefterim>

Şimdilik bu kadar bir sonraki makalem ADO.Net üzerinden okuyacağımız dataları Xml dökümanlarına yazacağız Şimdilik Bu kadar. İnsan öğrenmeye doymuyor değilmi ?




   Fatih YAŞAR
   fyasar@msn.com
   Software Developer Specialist