![]() | |
Şemadan Xml Dosya Oluşturma Ve Xml Dosyadan Şema Oluşturma | 03.09.2008 02:00:00 |
| Kategori : Visual C# .NET Özet : Bu makalede bir şemadan, elimizdeki verilerle doldurulmuş bir xml dosya üreteceğiz. Daha sonra da bu işlemin tersini yapacağız yani bir xml dosyadan onun veri kalıplarını belirleyen bir şema dosyası oluşturacağız. | |
Günümüzde bağımsız uygulamalar arası veri transveri bildiğiniz üzere xml dosyalar ve servisler üzerinden sağlanmaktadır. Bu işlemlerin sağlıklı olması için elbette veri formatlarının uyumlu ve bir protokole dayalı olmalıdır. İşte xml dosyalarda bu protokol xsd dosyaları yani şemalardır. Çalıştığınız iş ortağı size bir şema verdi ve veritabanınızdaki verileri bu formatta oluşturduğunuz bir xml dosyası olarak üretip yollamanızı istiyor. Ya da tam tersi , siz bir xml dosya ürettiniz , karşı tarafa şema vermeniz gerek. Bu makalede bir şemadan, elimizdeki verilerle doldurulmuş bir xml dosya üreteceğiz. Daha sonra da bu işlemin tersini yapacağız yani bir xml dosyadan onun veri kalıplarını belirleyen bir şema dosyası oluşturacağız. Şemadan xml dosya üretmek için yapacağımız işlemler : I. Öncelikle şemadan bir sınıf üretebilmek için Bill amcanın bize sağladığı xsd.exe ‘ ye ihtiyacımız olacak. http://hakanaktan.googlepages.com/xsd.rar adresine koydum buradan aramadan indirebilirsiniz. II. Ürettiğimiz sınıftan yeni bir nesne üreterek içine , xml dosyamızda olmasını istediğimiz verileri dolduracağız. III. Elimizdeki nesne serializable olduğundan (xsd.exe nin oluşturduğu sınıf serializable)artık ondan XmlSerializer kullanarak bir xml metni oluşturup dosyaya kaydedebiliriz. //Hadi bakalım parmaklar çalışsın..
Xsd ogrenciler.xsd /classes Bu komut bize ogrenciler.cs dosyasını sağlayacaktır. Default olarak C# sınıfı ürettiğinden parametre olarak sadece “/classes” girdik. Eğer vb sınıfı istiyorsanız “/languages” parametresini kullanmanız gerek. Tüm parametreler için “xsd.exe /help” yazmanız gerekecek.
Yukarıdaki şekilde komutun çalıştırılması işlemi sonucunu görmekteyiz.
Sınıfa namespace olarak projemizin adını ekliyoruz. “namespace SemadanXmlYarat” içine aldık.
Oluşacak dosya yukarıdaki gibi olacaktır. Burada ogrenciler root nesnesinin altında birden fazla öğrenci olabilir ve bir öğrencinin birden fazla dersi olabilir. Bu çoklu yapıda dizilerle uğraşmamak için dizi tanımlarını generic yapı olan List ile değiştirdim, yaptığım değişiklik sonucu oluşan format aşağıdaki gibidir.
private void btnSemaToXml_Click(object sender, EventArgs e) } private string SchemaToXmlString() ogrenci1.dogumTarihi = Convert.ToDateTime("1982-01-01"); Burada kullandığımız diğer fonksiyonlar da aşağıdadır. private String UTF8ByteArrayToString(Byte[] characters) UTF8Encoding encoding = new UTF8Encoding(); String constructedString = encoding.GetString(characters); return (constructedString); } try String XmlizedString = null; MemoryStream memoryStream = new MemoryStream(); //XmlSerializer xs = new XmlSerializer(typeof(ogrenciler)); XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); memoryStream = (MemoryStream)xmlTextWriter.BaseStream; XmlizedString = UTF8ByteArrayToString(memoryStream.ToArray()); return XmlizedString; } catch (Exception e) System.Console.WriteLine(e); return null; } } Şimdi de sıra xml dosyadan şema üretme işlemine geldi. İşin bu kısmı çok daha kolay. Tek yapmamız gereken, “System.Xml.Schema” kütüphanesini projemize eklemek ve aşağıdaki kodu yazmak. private void btnXmlToSema_Click(object sender, EventArgs e) schemaSet = schema.InferSchema(reader); foreach (XmlSchema s in schemaSet.Schemas()) } Konsol dan kopyalayıp , text dosyaya yapışturdğımız dosyayı “.xsd” olarak keydettiğimizde artık elimizde bir şemamız olacak. Makalede kullanıdığımız kodların tamamı proje olarak, dosyalarla birlikte aşağıdaki adreste olacaktır. http://hakanaktan.googlepages.com/SemadanXmlYarat.rar Dileyenler buradan indirerek inceleyebilirler. Sorularınız olursa e-posta ile ulaşabilirsiniz. | |
Yazgelistir.com | |