1 Kasım 2008 Cumartesi

XML Dokümanlarını Kodla Oluşturmak

Bu yazımda günümüzde çok kullanılan XML dökümanlarını kodla oluşturmaya değineceğim.

Bir XML dökümanı hazırlamak için C# dilinde XmlTextWriter sınıfını kullanabiliriz. Bu sınıf yardımıyla XML olarak biçimlendirmek istediğimiz verileri istersek elle, istersek bir kaynaktan alarak kullanabiliriz. Ben bu yazımda verileri bir veri tabanından alarak XML formatına dönüştürmeyi tercih ettim. Kodlarımı konsol uygulaması şeklinde yaptım. Dilerseniz bir Windows uygulaması açıp sadece bir buton atıp, o butonun Buton_Click olayına bu kodları kopyala yapıştır yapabilirsiniz. Ve burada oluşturulacak dosyaların adresleri, aksi belirtilmedikçe program klasörünün kök dizini olarak belirlenmiştir. Neyse fazla uzatmadan konuya geçelim.

Programda kullanmak için ilk önce aşağıdaki gibi “Dünyadan” isimli bir veri tabanını ve bu veri tabanında “Ülkeler” isimli bir tabloyu oluşturup verileri girelim.

Burada Access veritabanı kullandım. SQL veritabanı kullanıldığında da çok fazla değişen bir şey olmayacaktır.

Kodları yazmaya başlamadan önce, ilk olarak programımıza
using System.Xml;
using System.Data;
using System.Data.OleDb;
kütüphanelerini ekleyelim. Bu kütüphaneler veri tabanından veri çekmek ve XML dökümanını oluşturmak için gereklidir aksi halde programımız derlenmez.


Kütüphaneleri ekledikten sonra veri tabanına bağlanıp bu verileri oluşturduğumuz bir DataTable nesnesine kaydedelim. Bunun için aşağıdaki kodları yazabiliriz.
string bag = "Provider=Microsoft.Jet.OLEDB.4.0;
DATA Source=Dünyadan.mdb";
string sorgu = "SELECT Ulke, Baskent FROM Ulkeler";
DataTable tablo = new DataTable();
OleDbConnection baglanti = new OleDbConnection(bag);
OleDbDataAdapter adap = new OleDbDataAdapter(sorgu, baglanti);
adap.Fill(tablo);
Burada “bag” adlı değişkenle veri sağlayıcısını ve veri tabanımızın adresini belirtiyoruz. “sorgu” adlı değişkenle de veri tabanımız içindeki “Ulkeler” isimli tablodan istediğimiz verileri çekmek için SQL cümlesi oluşturuyoruz. Daha sonra verileri yerleştireceğimiz “tablo” adlı DataTable nesnesini oluşturuyoruz. Daha sonraki iki satırda da önce veritabanımıza bağlantıyı kurup sonrada DataAdapter Yardımıyla verileri alıyoruz. En son olarak da tablomuza bu verileri kaydediyoruz.

Verileri çektik. Şimdi sıra XML şekline dönüştürmeye geldi. Onun için önce aşağıdaki kodları vereyim sonra açıklamaya çalışırım.
string yol = "Ülkeler.xml";
XmlTextWriter yaz = new XmlTextWriter(yol,
System.Text.Encoding.GetEncoding("windows-1254"));
yaz.WriteStartDocument();
yaz.WriteStartElement("Ülkeler");
int i = 1;
foreach(DataRow satir in tablo.Rows) {
     yaz.WriteStartElement("Ülke");
     yaz.WriteAttributeString("No", i.ToString());
     yaz.WriteStartElement("AdıVeBaşkenti");
     yaz.WriteString(satir[0].ToString() + "-->" + satir[1].ToString());
     yaz.WriteEndElement();
     yaz.WriteEndElement();
     i++;
}
yaz.WriteEndElement();
yaz.WriteEndDocument();
yaz.Close();

Yukarıdaki kodda ilk olarak “yol” değişkeni ile oluşturulacak XML belgesinin yeri belirleniyor. İkinci aşamada XmlTextWriter nesnesi oluşturulup bu belirlediğimiz yoldaki dosyaya yazılacağı ve yazılan dosyanın dil formatının nasıl olacağı belirleniyor. Burada
“System.Text.Encoding.GetEncoding("windows-1254”)”
ile formatın Türkçe karakter uyumlu olacağı belirtiliyor. Daha sonraki satırda dökümana başlangıç komutu veriliyor ve her başlangıçın bir bitişi olacağı için program sonunda da bitiş komutu veriliyor.
“WriteStartElement("Ülkeler")”
komutu ile Ülkeler isimli bir XML tagı oluşturuluyor. Foreach döngüsünde tablonun satır sayısına bağlı olarak alt XML tagları ekleniyor.
“WriteAttributeString("No", i.ToString())”
 ve
“WriteString(satir[0].ToString() + "-->" + satir[1].ToString())”
komutlarıyla tahmin edeceğiniz gibi XML tag’ına öznitelik (Attribute) ve değer ekleniyor. Ve programın sonunda, daha önce de dediğim gibi -başlatılan bir komut daima bitirilmelidir yoksa programınız doğru çalışmaz- başlatılan komutlar sonlandırılıyor. Bu sonlandırma komutlarından, adından da anlaşılacağı gibi ”WriteEndElement()” komutu ile açılan XML tag’ı kapatılıyor, “WriteEndDocument()” komutu ile açılan XML dökümanı kapatılıyor ve son olarak “Close()” ile XmlTextWriter nesnesi kapatılıyor.

Yazımı hazırlarken sizin XML söz dizimini ve veri tabanı bağlantılarını bildiğinizi kabul ettim. Çünkü burada bunları da anlatmak istesem üç ayrı makaleyi bir araya toplamam gerekirdi.

Kaynak: Her Yönüyle C# - Sefer Algan

Hiç yorum yok:

Yorum Gönderme

Related Posts Plugin for WordPress, Blogger...