XML Sınıflarının Özellikleri ve Kullanımı

Eyl 08, 2013

XMLTextWriter Sınıfı

"XMLTextWriter" sınıfı, yazılan kodlar aracılığıyla XML dosyalarını oluşturmak ve oluşturulan dosyaları biçimlendirmek için kullanılan bir sınıftır. Bu sınıf "XMLWriter" sınıfından türemiş olan bir sınftır. Aşağıda bu sınıfa ait özelliklerden bazıları listelenmiştir:

  • BaseStream: "XMLTextWriter" ile yazılan akımı geri döndürmek için kullanılır.
  • Formatting: Yazılan kodların XML çıktısının hangi formatta olacağını belirler. Intended ve None olmak üzere iki değer alır. Bunlardan Intended, Xml elemanlarının girinitli çıkıntılı olarak yazılmasını sağlarken, None elemanların alt alta düz bir şekilde yazılmasını sağlar.
  • Indentation: Formatting özelliği Formatting.Indented olarak kullanıldığında alınan çıktılardaki girinti sayısının kaç karakter olacağını belirler.
  • IndentChar: Indentation özelliği kullanıldığında oluşan girintilere konulacak karakteri belirler.
  • QuoteChar: Alıntı yapılan karakterin belirlenebilmesini sağlayan bir özelliktir.
  • XmlLang: Xml:lang alanının boyutunu belirler.
  • WriteStat: Yazılacak değerin durumu hakkında bilgi verir. Bu durumlar start, element, attribute, content, prolog ve close' dur.

Ayrıca bu sınıfın kullanımında çok önemli olan bazı metotlar vardır. Bu metotlardan çok sık kullanılanlar aşağıda listelenmiştir:

  • WriteStartDocument(): XML dokümanı yazmaya başlanırken kullanılan metottur. Bu metot, dokümanın XML verisi ve encoding bilgisi taşıdığını gösterir.
  • WriteStartElement(string): Bu metot xml dokümanına yeni bir eleman eklemeyi sağlar.
  • WriteAttributeString(name, value): Bu metot sayesinde yeni bir sıfat ve değeri yazdırılabilir.
  • WriteEndElement(): WriteStartElement(string) ile başlanılan eleman bu metot ile bitirilir.
  • WriteEndDocument(): XML dokümanını sonlandırmak için bu metot kullanılır.
 namespace XmlTextWriter{
    class deneme
    {
        static void Main(string[] args)
        {
            XmlTextWriter deneme = new XmlTextWriter("dosya.xml", System.Text.Encoding.GetEncoding("windows-1254"));
            deneme.Formatting = Formatting.Indented;
            deneme.WriteStartDocument();
            deneme.WriteStartElement("KUTUPHANE");

            deneme.WriteStartElement("Kitap");
            deneme.WriteAttributeString("adi", "The Turn of the Screw");
            deneme.WriteEndElement();

            deneme.WriteStartElement("author");
            deneme.WriteString("Henry James");
            deneme.WriteEndElement();

            deneme.WriteStartElement("binding");
            deneme.WriteString("trade paperback");
            deneme.WriteEndElement();

            deneme.WriteStartElement("price");
            deneme.WriteString("$3.85");
            deneme.WriteEndElement();

            deneme.WriteEndDocument();
            deneme.Close();
        }
    }
}

Bu Xml kodlarının çalıştırılması sonucunda elde edilen Xml dosyası aşağıdaki gibi olur:

<?xml version ="1.0" encoding ="windows-1254" ?>
- <KUTUPHANE>
  <Kitap adi="The Turn of the Screw" />
  <author>Henry James</author>
  <binding>trade paperback</binding>
  <price>$3.85</price>
  </KUTUPHANE/>

XMLTextReader Sınıfı

"XMLTextReader" sınıfı bir dosyadaki XML verisine erişip o dosyadan okuma yapılmasını sağlar. Bu sınıf, XML dosyalarına çoğu zaman veri tabanı kullanımından daha hızlı ve yalnızca ileri yönde erişim sağlar. "XMLTextReader" sınıfı, dosyanın birinci satırından başlayarak okur ve aşağıya doğru dosyanın sonuna kadar devam eder. "XMLTextReader" sınıfı sayesinde dosyada oluşturulmuş olan elementlere ve özelliklere çok fazla bellek kullanılmadan erişilmesi mümkündür. "XMLTextReader" sınıfının çok fazla özelliği bulunur. Sık kullanılan özelliklerden bazıları şunlardır:

  • AttributeCount: İlgili düğümün nitelik sayısını tamsayı tipinden geri döndürür.
  • EOF: Okuma esnasında ilgili dokümanın sonuna gelinip gelinmediğini kontrol eder.
  • LineNumber: : Oluşturulan dokümandaki satır numarasını verir.
  • LinePosition: Satırın dosya içerisindeki konumunu verir.
  • HasAttributes: Düğümün içerisinde özelliklerin olup olmadığına dair boolean değer geri döndürür.
  • IsEmptyElement: Düğümün boş olup olmadığını kontrol eder.
  • Local Name: Seçili düğümün yerel ismini verir.
  • Value: Düğümün sahip olduğu geri döndürür.
  • HasValue: Düğümün bir değer taşıyıp taşımadığını belirtir.
  • Depth: Düğümün dökümandaki derinliğini belirtir.

Bu sınıfın kullanımının daha iyi anlaşılması için yukarıda oluşturulmuş olan Xml dosyası "XmlTextReader" ile okunmuş, ismi ve ilgili özellikleri ekranda görüntülenmiştir.

namespace XmlTextWriter{

class XmlTextReaders
    {
        static void Main(string[] args)
        {
            XmlTextReader deneme = new XmlTextReader("dosya.xml");
            while(deneme.Read()){
                if(deneme.NodeType == XmlNodeType.Element)
                {
                    Console.WriteLine("{0,-15}", deneme.Name);
                    if(deneme.HasAttributes)
                    {
                        Console.WriteLine("{0} niteliği bulunmaktadır", deneme.AttributeCount);
                        while(deneme.MoveToNextAttribute())
                            Console.WriteLine("{0} = {1}", deneme.Name, deneme.Value);
                            Console.WriteLine();
                            string C = Console.ReadLine();                   
                    }                   
                }               
            }        }      
    }

 

Yukarıdaki kod parçalarına ait ekran çıktısı aşağıda gösterilmiştir:

 

XMLElement Sınıfı

"XMLElement" tipindeki nesneler XML dosyalarındaki elemanları temsil ederler. Bu sınıf "XMLNode" sınıfından türemiştir ve bu sınıfın tüm üye elemanlarını içerir. Aşağıda bu sınıfın bazı özelliklerinden bahsedilmiştir.

  • Attributes: Düğümün özelliklerini "XmlAttributeCollection" nesnesi olarak geri döndürür.
  • BaseUrl: İlgili nesnenin URL tabanını geri döndürür.
  • ChildNodes: İlgili düğümün altında bulunan tüm düğümleri geri döndürür.
  • FirstChid: İlgili düğümün ilk alt düğümünü geri döndürür.
  • LastChild: İlgili düğümün son alt düğümünü geri döndürür.
  • ParentNode: İlgili düğümün üstünde bulunan ilk düğümü geri döndürür.
  • HasChildNodes: Bahsi geçen düğüm alt düğümler içeriyorsa true içermiyorsa false değer döndürür.
  • InnerXml: Düğümün içerisindeki tüm bilgileri XML etiketleri de dahil olmak üzere geri döndürür.
  • Value: Düğümün değerini geri döndürür. Bu değer düğüm tipine göre değişir.
  • NodeType: Düğümün tipini "XMLNodeType" cinsinden verir.

 Bu sınıfa ait çok kullanılan bazı metotlar aşağıda listelenmiştir:

  • GetAttribute(öznitelik adı): Ögenin parametre olarak verilen ada sahip özniteliğinin değerini verir.
  • GetAttributeNode(ölznitelik adı): İsmi verilen özniteliğe sahip olan düğümü geri döndüren bir metottur.
  • GetElementsByTagName: Aynı türden olan tüm öğeleri bir NodeList (Düğüm listesi) topluluğu şeklinde geri döndüren bir metottur.

Bu sınıfın daha iyi anlaşılabilmesi için aşağıdaki kod parçaları kullanılarak örnek bir uygulama yapılacaktır:

class XmlElements
    {
        static void Main(string[] args)
        {
            XmlTextReader deneme = new XmlTextReader("dosya.xml");
            XmlDocument xmld = new XmlDocument();
            xmld.Load(deneme);
            XmlNodeList xmlnl = xmld.ChildNodes;
            xmlnl[1].ChildNodes[0].InnerText = "yeni dugum";
            xmld.Save("dosya2.xml");
        }
    }

Bu kod parçaları çalıştırıldığında xml belgesinin ilk çocuk düğümünün içerisindeki metin alanına "yeni dugum" yazılmış olacak ve bu belge dosya2.xml şeklinde kaydedilecektir.

XMLDocument Sınıfı

"XMLDocument" sınıfından oluşan nesneler belgenin kök(root) düğümünü temsil ederler. "XMLDocument" sınıfı "XMLNode" sınıfından türemiştir. Bu sınıf XML dosyasını yüklemek ve kaydetmek gibi işlemler için kullanılır. Bu sınıfın da kendisine ait bazı özellikleri vardır. Aşağıda bunlardan kısaca bahsedilmiştir:

  • Doctype: Belge türü bildirimini geriye döndüren bir özelliktir.
  • DocumentElement: Kök düğümünü temsil eden element düğümüdür.
  • Ondataavailable: Bu özelliğe, daha önceden yazılan bir işlevin adı atandığı takdirde, XML verisi açıldığında bu işlev kendiliğinden çağrılacaktır.
  • Onreadystatechange: "Document" düğümünün readystate özelliği değiştiğinde işlevin kendiliğinden çağrılmasını sağlar.
  • ParseError: Belge işlendiğinde tüm hatalarla ilgili bilgi içeren bir nesnedir.
  • ReadyState: XML belgesinin, yüklenmesi ve işlenmesinin güncel durumu hakkında bilgi verir. Aşağıda aldığı değerler ve bu değerlerin anlamlarından bahsedimiştir:
                                                
    0: başlatılmamış
    1: yükleniyor
    2: yüklendi
    3: etkileşimli
    4: tamamlandı

  • Url: XML belgesinin URL'sini geri döndürür.
  • GetElementsByTagName: Belgedeki öğrenilmek istenilen tür adına sahip tüm öğelerin topluluğunu verir.

Bu sınıfın daha iyi anlaşılabilmesi için aşağıda "XmlDocument" sınıfıyla örnek bir uygulama yapılmıştır.

class XmlDocument
    {
        static void Main(string[] args)
        {
            XmlTextReader deneme = new XmlTextReader("dosya.xml");
            XmlDocument xmld = new XmlDocument();
            xmld.Load(deneme);
        }
    }