XmlTextReader

Yazar: Gürkan Alkan
Kategori: XML WEB Servisleri
Eklenme Tarihi: 18.12.2008 08:36:49



Bu makalemizde XmlTextReader'ın kullanımını göreceğiz.

Merhaba arkadaşlar. Bu makalemizde XmlTextReader'ın kullanımını göreceğiz.
XmlTextReader, Xml dosyasını okur. [Tek yol tabi ki değildir(Ör:XPath). ] Hızlı bir şekilde, baştan sona kadar tek tek okur. Kullanım ihtiyacına göre yararlı da zararlı da olacağı yerler vardır.
Bir proje açalım. Bu projeye bir Xml File ekleyin (İsmi aynen kalabilir, önemli değil). XmlFile1'in içine

<? xml version="1.0" encoding="utf-8" ?>
<dunya>
    <kita ad="avrupa">
        <ulke ad="türkiye">
            <il>istanbul</il>
            <il>ankara</il>
            <il>izmir</il>
            <il>van</il>
        </ulke>
        <ulke ad="italya">
            <il>roma</il>
            <il>torino</il>
            <il>napoli</il>
            <il>milano</il>
        </ulke>
        <ulke ad="san marino"/>
    </kita>
</dunya>

yazalım. Gördüğünüz üzere basit bir Xml dosyası oluşturduk.( <dunya> kök elementtir. Altında çocuk elemenetleri(kita,ulke) ve onların attribute'ları[ad] var. ).
Şimdi bu dosyadan okuma yapacağız. İsterseniz kodumu baştan vereyim ve direkt üzerinden anlatayım.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;

namespace XMLIntro
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            XmlTextReader reader = new XmlTextReader(@"..\..\XMLFile1.xml");
           
            TreeNode tndunya = new TreeNode();
            tndunya.Text = "dunya";
            treeView1.Nodes.Add(tndunya);
 
            TreeNode tnKita = null;
            TreeNode tnUlke = null;
            TreeNode tnIl = null;

            while (reader.Read())
            {

                if (reader.NodeType==XmlNodeType.Element&& reader.Name=="kita")
                {
                  
                    tnKita = new TreeNode();
                    tnKita.Text = reader.GetAttribute("ad");
                    tndunya.Nodes.Add(tnKita);
                }

                else if (reader.NodeType==XmlNodeType.Element && reader.Name=="ulke")
                {
                    tnUlke = new TreeNode();
                    tnUlke.Text = reader.GetAttribute("ad");
                    tnKita.Nodes.Add(tnUlke);
                }

                else if (reader.NodeType==XmlNodeType.Element && reader.Name=="il")
                {
                    reader.Read();
                    tnIl = new TreeNode();
                    tnIl.Text = reader.Value;
                    tnUlke.Nodes.Add(tnIl);
                }

            }

            reader.Close();
        }
    }
}


XmlTextReader reader = new XmlTextReader(@"..\..\XMLFile1.xml");  ile önce bir XmlTextReader nesnesi yarattık. Okumaya bu nesne ile yapacağız. Constructor'ına da okuyacağımız dosyayı verdik. İki nokta(..) bir üst dizin demektir. .exe dosyasındayiz biz; bir üst dizin bin; diğer üst dizin debug, sonra kendi klasöründeyiz(xml dosyamıza ulastik artik.).

Bunları bir TreeView'da göstermek istedim. O yüzden TreeView'a eklenmek üzere bir TreeNode oluşturdum. Ve text'ine değer atadım. Sonra da TreeView'a ekledim bunu
            TreeNode tndunya = new TreeNode();
            tndunya.Text = "dunya";
            treeView1.Nodes.Add(tndunya);

Daha sonra hiyerarşideki derinliği takip edebilmek için (alt çocukları) TreeNode olarak tanıttım.
            TreeNode tnKita = null;
            TreeNode tnUlke = null;
            TreeNode tnIl = null;

Okuyabildiği sürece okuyabilmesi için bir while döngüsüne aldık.
if (reader.NodeType==XmlNodeType.Element&& reader.Name=="kita")   // Eğer bir element ise ve ismi kita ise
tnKita = new TreeNode();//kita'yi instance'ladik
tnKita.Text = reader.GetAttribute("ad");//atrribute'ün degerini alabilirsin o node'daki(atrribute'un ismini ya da indeksini vererek)
tndunya.Nodes.Add(tnKita);//tndunya'nin çocugu oldugu icin ona ekledik.

Aynı mantıkla aşağıdaki kod bloğunu da inceleyebiliriz.
else if (reader.NodeType==XmlNodeType.Element && reader.Name=="ulke")//ulke elementi ise okunan
                {
                    tnUlke = new TreeNode();//tnulke'yi instance'ladik
                    tnUlke.Text = reader.GetAttribute("ad");//ad attribute'nün degerini aldik
                    tnKita.Nodes.Add(tnUlke);//tnKita'nin cocugu oldugu icin ona ekledik.
                }

Herhalde son bloğu da bu şekilde inceleyebilirsiniz. Son satırda açtığımız reader'ı kapatıyoruz (Aksi taktirde ikinci kez okuma yaptığımızda sorunla karşılaşırız.).

Belirtmediğim son nokta kullandığımız isim uzayı. İşlemlerimizi yaparken System.Xml isim uzayını kullandık.

Geldik bir makalemizin daha sonuna. Başka bir makalede görüşmek üzere.

Gürkan Alkan
İstanbul Üniversitesi Bilgisayar Mühendisliği

grkn.alkan@gmail.com


Gürkan Alkan

1986 İstanbul doğumludur. İstanbul Üniversitesi Bilgisayar Mühendisliği 4. sınıf öğrencisidir. Geliştirdiği kişisel projelerle yazılım hayatına devam etmektedir.
Bu makaleye ilk yorum yapan siz olun.

Yorumunuz