Kaynak : MSAkademik
Xml artık bugünün ve geleceğin teknolojisi. Buna bütün dev firmalar inanmış durumda. Microsoft gece gündüz çalışarak tüm sistemlerini xml tabanına taşıyor, Macromedia ürünlerinin yeni versiyonları xml ile daha çok içli dışlı. Aynı şekilde Sun ve IBM de tam gaz xml'i benimsemiş durumdalar. Bu yüzden xml'i kullanmayı öğrenmek artık bir lüks olmaktan çıktı, bir zorunluluk haline geldi.
Xml Webservislerine geçiş yaşandığı şu günlerde bazı firmalar ilk etapta bilgilerini şimdilik xml olarak sunmaya başladılar. Örnek olarak IMKB'nin döviz kurlarını vermesi ya da Radikal gazetesinin günlük haberlerini vermesi gibi. Biz de bu makalede bilgilerimizi program koduyla nasıl xml olarak yayınlayabileceğimizi öğreneceğiz. Tabii ki bunun birçok yolu var. Biz System.Xml ad alanındaki XmlWriter soyut(abstract) sınıfının alt sınıfı olan XmlTextWriter sınıfını kullanarak yapacağız. Amacımız XmlTextWriter sınıfının nasıl kullanıldığını ögrenmek.
Bunu kod üzerinde göstermeye çalışalım. Örneğimizide SQL Server dan alacağımız bilgileri bir xml dosyası yaratıp içine yazacağız.
// Sql Serverdaki Northwind verıtabanına bağlantıyı sağlayacak // bağlantı cümlesi. Bunu kendi bilgisayarnıza göre kendiniz // olusturacaksınız. string CnnStr="<Northwind e bağlanan connection stringiniz>"; SqlConnection sqlCnn = new SqlConnection(CnnStr); SqlDataAdapter sqlAdapter = new SqlDataAdapter("Select * From Products",sqlCnn); DataSet dSet = new DataSet(); try { sqlCnn.Open(); // 1 ve 5, birinci kayıttan başla ve 5 kayıt al demek. // örnek için yeterli. "Products", tablonun ismi. sqlAdapter.Fill(dSet,1,5,"Products"); } catch(Exception exp) { MessageBox.Show("Hata: "+exp.Message); } finally { if (sqlCnn.State == ConnectionState.Open) { sqlCnn.Close(); } } //doyanın ismini ve yolunu belirliyoruz. XmlTextWriter xmlDoc = new XmlTextWriter( @"E:\products.xml",System.Text.Encoding.UTF8); // dosyaya nasıl yazılacagını belirtiyoruz. xmlDoc.Formatting = Formatting.Indented; // Dosyanin başına <?xml version="1.0" ?> yazıyoruz. // false parametresi standalone=no yazar // true olsaydı, standalone=yes yazacakti. xmlDoc.WriteStartDocument(false); // "DOCTYPE" tanımını yazıyoruz. // Bu örnekte kullanmıyoruz ama ögrenmek için bulunsun... xmlDoc.WriteDocType("Urunler",null,null,null); xmlDoc.WriteComment("Comment, yani dosyaya yorum yazıyoruz..."); //baslangıç elementini yazıyoruz xmlDoc.WriteStartElement("Ürünlerimiz"); // Ürünlerimiz elementinin altına // yeni bir baslangıç elementi daha yazıyoruz. xmlDoc.WriteStartElement("Ürün",null); string no = dSet.Tables[0].Rows[0]["ProductID"].ToString(); string uID = dSet.Tables[0].Rows[0]["ProductName"].ToString(); string fiyat= dSet.Tables[0].Rows[0]["UnitPrice"].ToString(); // Bilgi içeren elementleri yaziyoruz. // Bilgiyi dSet ten alıyor. xmlDoc.WriteElementString("Numarasi",no); xmlDoc.WriteElementString("ÜrünAdı",uID); xmlDoc.WriteElementString("Fiyatı",fiyat); // Yukarida kaç tane writeStartElement yazdıysak // o kadar writeEndElement yazıyoruz.(yani 2 tane) xmlDoc.WriteEndElement(); // buyaya kadar olan kısmı bir for döngüsü içine alarak // bütün dSet'in içindekilerini yazabilirdik. // Ama örnek için sadece bir deflık yaptık. xmlDoc.WriteEndElement(); // Aslında su an dosya bos. // Bu bilgilerin hepsi hafızada duruyor // Bu bilgleri dosyaya yazalım xmlDoc.Flush(); // dosyayı kapatalım xmlDoc.Close();
|
Kod için gerekli açıklamaları kod satırlarının üstüne yazdım. Böylece anlamak daha kolay olur. Xml Dosyamız asağıdaki gibi olacaktır.
Products.xml
|
<?xml version="1.0" encoding="utf-8" standalone="no"?> <!DOCTYPE Urunler(View Source for full doctype...)> <!--Comment, yani dosyaya yorum yazıyoruz...--> <Ürünlerimiz> <Ürün> <Numarası>2</Numarası> <ÜrünAdı>Chang</ÜrünAdı> <Fiyatı>19,0000</Fiyatı> </Ürün> </Ürünlerimiz>
|