System.XML kütüphanesini incelemeye devam edelim. Xml belgelerinde veri sorgulamak için üç farklı sınıf mevcuttur. Bunlar bir önceki makalemizde ayrıntılı olarak imcelediğimiz XmlDocument diğer ikisi de XmlDataDocument ve XPathDocument sınıflarıdır. XmlDataDocument sınıfı diğer iki sınıftan farklı olarak bir dosya yerine kaynak olarak bir dataset ile senkronize olabilmesidir. Bunun dışında metodlar ve kullanım şekilleri biribirine çok benzemektedir. Xml dökümanını sorgulamak için bu üç sınıfta da ortak olarak uygun XPaht sorgusu ile birlikte SelectSingeNode ve SelectNodes metodları kullanırlar.


Örneklerimizde kullanacağımız xml dökümanı aşağıdaki gibi olsun.

Şekil 1: Örneklerde kullanacak xml dökümanı

SelectSingelNode : Bir xml dökümanının sadece bir düğümünü sorgulamak için kullanılır.

using System;

using System.Xml;

public class XmlUygulama {

public static void Main() {

XmlDocument myDoc = new XmlDocument();

myDoc.Load(”myXML.xml”);

XmlNode NodeBook; // işlem yapacağımız düğüm satırı

NodeBook = myDoc.DocumentElement.SelectSingleNode(”book[@ISBN=�1-861002-30-1�]“); //XPath sorgusu book düğümündeki ISBN niteliğinin değer =�1-861002-30-1� olan düğüm anlamına gelir

Console.WriteLine(NodeBook.OuterXml);

} }

Kod1 : SelectSingelNode metodunun kullanımı

Şekil 2 : SelectSingelNode için yapılan uygulamanın ekran görüntüsü,

SelecetNodes : Bir xml dökümanından birden fazla düğüm seçmek için kullanılır.

public static void Main() {

XmlDocument myDoc = new XmlDocument();

myDoc.Load(”myXML.xml”); XmlNodeList NodeList;

NodeList = myDoc.DocumentElement.SelectNodes(”/bookstore/book/@title”); //XPath sorgusu xml belgesinde book düğümündeki title niteliğindeki değerlerin hepsini alır

foreach (XmlNode adi in NodeList)

Console.WriteLine(adi.Value);

}

Kod2 : SelectNodes metodunun kullanımı

Şekil 3 : SelectNodes metodunun kullanıma ilişkin örneğin ekran çıktısı

System.Xml kütüphanesinde sık kullanılan terimlere şöyle bir göz atalım.

InnerXML : Kullanılan düğüme ilişkin yavru düğümleri ve bu yavru düğümlere ait bilgileri verir.

OuterXML : Kulanılan düğüme ait bütün nitelikleri, bilgileri ve yavru düğümleri bilgileri ile verir.

Bu iki özelliğin arasındaki farkı aşağıdaki ekran çıktısında da görebilirsiniz. İlk resimde OuterXML özelliği kullanılmış. İkinci resimde de InnerXML özelliği .

Şekil 4 : Seçili düğümün OuterXML özelliği kullanılarak elde edilen ekran çıktısı

Şekil 5 : Seçili düğümün InnerXML özelliği kullanılarak elde edilen ekran çıktısı

ChildNodes : Kullanılan düğüme ait olan yavru düğümleri XmlNode kolleksiyonu şeklinde verir.

NextSibling : Kullanılan düğümden hemen sonra gelen düğümü XmlNode sınıfı türünden verir.

PreviousSibling :Kullanılan düğümden bir önceki düğümü XmlNode sınıfı türünden verir

ParentNode : Kullanılan düğümü kapsayan ana düğümü XmlNode sınıfı türünden verir.

HasChildNode : Kullanılan düğüm başka düğümler içeriyorsa true değerini geri döndürür.

FirstChild : İlgili dökümanın ilk düğümünü XmlNode sınıf türünden verir.

LastChild : İlgili döküman nesnesinin son düğümünü XmlNode sınıfı türünden verir.

Copy : İlgili düğümün XmlNode sınıf türünden niteliklerin içeği olmadan kopyasın alır.

Clone(bool) : İlgili düğümün XmlNode sınıfı türünden tüm nitelikleri ve değerleri ile birlikte kopyasının alınmasını sağlar. Parametre olarak aldığı boolen değere göre kopyalama işlemini yapar. Boolean değer true ise ilgili düğümün sahip olduğu yavru düğümleri ve bu yavru düğümlerin bütün nitelik ve bilgilerini de alır. Boolena değer false ise sadece ilgili düğümün bilgilerini ve değerlerini yavru düğümler olmadan alır.

XmlDataReader Sınıfı

System.Xml kütüphanesin XmlReader ve buna benzeyen üç farklı sınıf içermektedir. Bu sınflar XmlTextReader, XmlNodeReader ve XmlValidatingReader dır. Bir dosyadan veya karakter katarından elde edilen xml belgesi sadece okumak amacı ile kullanılacaksa bu sınfların tercih edilmesi performan açısından oldukça önemlidir.

XmlTextReader : Bir dosyadan, bir karakter katarından veya bir girdi akışından okuma yapmayı sağlayan sınıftır. Xml belgesinin geçerliliğini kontrol eder ve biçimi uygun değilse XMLException türünden hata üretir. Oluşan XmlException sayesinde hatanın nerden kaynaklandığını kolaylıkla bulunması sağlanır.

XmlValidatingReader : XmlTextReader oldukça benzemektedir. Fakat XmlValidatingReader bir şema yada DTD(DataType Definition) yardımı ile xml belgesinin geçerliliğini denetleme yeteneğine sahiptir. XmlValidatingReader sınıfı okuna xml �in geçerlilik denetimi yapabilem konusunda oldukça iyidir ama XmlTextReader kadar randıman sağlamaz ve özellikleri kısıtlıdır.

XmlNodeReader : Doğrudan bellekten çalıştığı için diğer sınıflar arasında en hızlı olanıdır. Ayrıca okunan xml in geçerliliğini denetlemek zorunda değildir. Bir belgenin tümünü yada sadece dökümanın bir kısmını okuyabilir.

XmlReader ve benzeri sınıfların ortak olarak kullandıkları metodlara şöyle bir göz gezdirelim.

Read() : Kullanılan readerın bir sonraki düğümünü okur. Read işlemi sonucunda işlem başarıyla gerçekleşmişse true değerini döndürür; eğer dosya sonuna gelmiş ise false değerinin döndürür.

AttributeCount : Mevcut düğümdeki niteliklerin sayısını verir.

HasAttribute : Düğüm niteliğe sahip ise true değeri döndürür aksi halde false değeri geri döner.

MoveToAttribute : Okunan düğümün ilgili niteliğinin bilgilerini verir.Aşırı yüklenmiş bir kaç versiyonu vardır.

EOF : XmlReader nesnesinin sonuna gelip gelinmediğinin kontrolunu yapar. Boolena değer geri döndürür.

Yazmış olduğumuz metodları bir örnekle inceliyelim.

public static void Main() {

XmlTextReader xmlRd = new XmlTextReader(”myXML.xml”);

while (xmlRd.Read()) {

Console.WriteLine(xmlRd.LocalName);

Console.WriteLine(xmlRd.NodeType);

if(xmlRd.HasAttributes)

for (int i = 0; i < xmlRd.AttributeCount; i++) {

xmlRd.MoveToAttribute(i);

Console.Write(” {0}={1}”, xmlRd.Name, xmlRd.Value);

}

} }

Kod3 : XmlTextReader kullanımı

XmlReader�ın kullanımına ilişkin bir örnek daha yapalım. Bu örnekte de Sql Server da FOR XML AUTO komutu sayesinde elde edeceğimiz veriyi xml olarak alabiliyoruz. Ve command nesnesinin ExecuteXmlReader metodu geriye XmlReader sınıfından değer döndürür.

public static void Main() {

SqlConnection con = new SqlConnection(”Integrated Security=SSPI;Initial Catalog=Northwind;Data Source=YEKBUN;Workstation ID=YEKBUN”);

con.Open();

XmlReader myXmlReader;

SqlCommand cmd = new SqlCommand(”SELECT CategoryID, CategoryName FROM Categories FOR XML AUTO”,con);

myXmlReader = cmd.ExecuteXmlReader();

myXmlReader.Read();

myXmlReader.MoveToContent() ;

while (! myXmlReader.EOF)

Console.WriteLine(myXmlReader.ReadOuterXml()) ;

myXmlReader.Close();

}

Kod4 : XmlReader kullanımı

Şekil 6 : XmlReader kullanımına ilişkin örneğin ekran görüntüsü

Bu makelmizde de .Net�in System.Xml kütüphanesin karışık görünen xml dosyalarının okunmasını ve işlenmesini ne kadar kolaylaştırdığını gördük.

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