En iyi yanıtlayıcılar
Seçenekli Xml Oluşturma Hakkında Yardım!

Soru
-
Product ve ProductOption Adında iki tablodan veri çekerek xml oluşturmaya çalışıyorum.Her ürünün seçeneği bulunmamakta.Bazı ürünler seçenekli bazı ürünler seçeneksiz. Yani eğer seçeneği varsa ürün seçenek nodeları açılsın istiyorum.Sorguyu aşağıdaki şekilde hazırladığımda her seçeneği bir ürün olarak alabiliyorum ve seçeneği olmayan ürünleri getirmiyor.
Select Products.ProductID, Products.ProductBarcode,CategoryName,BrandName,ProductName,ProductDescription,QuantityName,UnitPrice,KDV,KDVCase,RateName,PhotoWay,ProductMainStock,OptionName,OptionTitle,OptionPrice,OptionStock From Products
INNER JOIN ProductOption ON ProductOption.ProductID=Products.ProductID
INNER JOIN Categories ON Categories.CategoryID=Products.CategoryID
INNER JOIN Brands ON Brands.BrandID=Products.BrandID
INNER JOIN Quantities ON Quantities.QuantityID=Products.QuantityID
INNER JOIN KDVCase ON KDVCase.KDVCaseID=Products.KDVCaseID
INNER JOIN Rates ON Rates.RateID=Products.RateID
Ürünün seçeneği varsa Ürün Seçeneği şeklinde o ürüne ait ID ye sahip seçenekleri bu ürün altında nasıl listeleyebilirim?
Yanıtlar
-
Problemi EntityFramwork Yardımı ile çözdüm ihtiyacı olanlar için aşağıda paylaşıyorum.
Entity bağlantınızı tamamladıktan sonra aşağıdaki kodlar işinizi görecektir.
var context = new SaltContext(); List<Products> products = context.Products.ToList(); var xmlWriter = new XmlTextWriter(Server.MapPath("xml/Urunler1.xml"), Encoding.GetEncoding(1254)); xmlWriter.Formatting = Formatting.Indented; xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement("Products"); foreach (var product in products) { xmlWriter.WriteStartElement("Product"); xmlWriter.WriteElementString("ProductName", product.ProductName); xmlWriter.WriteElementString("ProductBarcode", product.ProductBarcode.ToString()); xmlWriter.WriteElementString("CategoryName", product.Categories.CategoryName); xmlWriter.WriteElementString("BrandName", product.Brands.BrandName); //xmlWriter.WriteElementString("ProductDescription", product.ProductDescription); xmlWriter.WriteElementString("QuantityName", product.Quantities.QuantityName); xmlWriter.WriteElementString("UnitPrice", product.UnitPrice.ToString()); xmlWriter.WriteElementString("KDV", product.KDV.ToString()); xmlWriter.WriteElementString("KDVCase", product.KDVCase.KDVCase1); xmlWriter.WriteElementString("RateName", product.Rates.RateName); xmlWriter.WriteElementString("KDVCase", product.PhotoWay); if (product.ProductOption.Any()) { xmlWriter.WriteStartElement("ProductOptions"); foreach (var option in product.ProductOption) { xmlWriter.WriteElementString("OptionName", option.OptionName); xmlWriter.WriteElementString("OptionTitle", option.OptionTitle); xmlWriter.WriteElementString("OptionPrice", option.OptionPrice.ToString()); xmlWriter.WriteElementString("OptionStock", option.OptionStock.ToString()); } xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); xmlWriter.WriteEndDocument(); //xmlWriter.Flush(); xmlWriter.Close(); string mesaj = "Xml Oluşturuldu"; Response.Write("<SCRIPT LANGUAGE='JavaScript'>alert('" + mesaj + "')</SCRIPT>");
- Yanıt Olarak İşaretleyen Serkan Canseven 25 Mayıs 2015 Pazartesi 14:49
- Düzenleyen Serkan Canseven 25 Mayıs 2015 Pazartesi 14:49 (Kod bloğu eklendi)
Tüm Yanıtlar
-
Şöyle birşey yapsan:
Bütün özellikleri ve bilgileri herneyse hepsini tek bir satırda toplasan. Seçeneği olmayan ürün değerini null yapsan. XML ile oluştururken seçeneği null olanlar hariç hepsinde özellikleri göster desen sanırım istediğini elde etmiş olursun, eğer doğru anladıysam.
Just a .net developer.
-
-
Önerin için teşekkürler her yolu deneyeceğim aslında çok zorlanmayacağımı düşündüğüm bi konuydu belki uykusuzluktan bilmiyorum 4 gündür uykusuzum.Projemin son günü hatta 1 saat gecikti.Aslında yapmak istediğim şu dediğim gibi beynim durdu.
Aşağıda XML oluşturduğum kodları yazıyorum.Ürün seçenek Elementinde başka bir sorgu çalıştırmam gerekiyor.Ürün Seçenek Tablosunda o id ye ait elemanlar varsa kolonları getir yoksa ürün seçenek tagi boş dönsün <UrunSecenek></UrunSecenek> gibi.
Eğer varsa <UrunSecenek><SecenekAdi></SecenekAdi><SecenekFiyat></SecenekFiyat></UrunSecenek>
gibi olsun istiyorum.
Bu arada bir ara tablo oluşturup söylediğini gerçekleştirmeye çalışacağım./***********************************************************************************/
string sorgu="Select Products.ProductID, ProductBarcode,CategoryName,BrandName,ProductName,ProductDescription,QuantityName,UnitPrice,KDV,KDVCase,RateName,PhotoWay,ProductMainStock From Products INNER JOIN Categories ON Categories.CategoryID=Products.CategoryID INNER JOIN Brands ON Brands.BrandID=Products.BrandID INNER JOIN Quantities ON Quantities.QuantityID=Products.QuantityID INNER JOIN KDVCase ON KDVCase.KDVCaseID=Products.KDVCaseID INNER JOIN Rates ON Rates.RateID=Products.RateID";
SqlCommand cmd = new SqlCommand(sorgu, conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
XmlTextWriter XML = new XmlTextWriter(Server.MapPath("xml/Urunler.xml"), null); ;
XML.Formatting = Formatting.Indented;
XML.WriteStartElement("Urunler");
while (dr.Read())
{
XML.WriteStartElement("Urun");
for (int i = 0; i < dr.FieldCount; i++)
{
XML.WriteElementString(dr.GetName(i), dr[i].ToString());
//Node ları getirtiyoruz.
XML.WriteElementString("UrunSecenek", dr[i].ToString());
}
XML.WriteEndElement();
//Oluşturulan ana node kapatılıyor.
}
XML.WriteEndElement();
//Root eleman kapatılıyor.
XML.WriteEndDocument();
//XML sayfasının yazma işlevi bitti.
XML.Close();
conn.Close();
string mesaj = "Xml Oluşturuldu";
Response.Write("<SCRIPT LANGUAGE='JavaScript'>alert('" + mesaj + "')</SCRIPT>"); -
Problemi EntityFramwork Yardımı ile çözdüm ihtiyacı olanlar için aşağıda paylaşıyorum.
Entity bağlantınızı tamamladıktan sonra aşağıdaki kodlar işinizi görecektir.
var context = new SaltContext(); List<Products> products = context.Products.ToList(); var xmlWriter = new XmlTextWriter(Server.MapPath("xml/Urunler1.xml"), Encoding.GetEncoding(1254)); xmlWriter.Formatting = Formatting.Indented; xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement("Products"); foreach (var product in products) { xmlWriter.WriteStartElement("Product"); xmlWriter.WriteElementString("ProductName", product.ProductName); xmlWriter.WriteElementString("ProductBarcode", product.ProductBarcode.ToString()); xmlWriter.WriteElementString("CategoryName", product.Categories.CategoryName); xmlWriter.WriteElementString("BrandName", product.Brands.BrandName); //xmlWriter.WriteElementString("ProductDescription", product.ProductDescription); xmlWriter.WriteElementString("QuantityName", product.Quantities.QuantityName); xmlWriter.WriteElementString("UnitPrice", product.UnitPrice.ToString()); xmlWriter.WriteElementString("KDV", product.KDV.ToString()); xmlWriter.WriteElementString("KDVCase", product.KDVCase.KDVCase1); xmlWriter.WriteElementString("RateName", product.Rates.RateName); xmlWriter.WriteElementString("KDVCase", product.PhotoWay); if (product.ProductOption.Any()) { xmlWriter.WriteStartElement("ProductOptions"); foreach (var option in product.ProductOption) { xmlWriter.WriteElementString("OptionName", option.OptionName); xmlWriter.WriteElementString("OptionTitle", option.OptionTitle); xmlWriter.WriteElementString("OptionPrice", option.OptionPrice.ToString()); xmlWriter.WriteElementString("OptionStock", option.OptionStock.ToString()); } xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); xmlWriter.WriteEndDocument(); //xmlWriter.Flush(); xmlWriter.Close(); string mesaj = "Xml Oluşturuldu"; Response.Write("<SCRIPT LANGUAGE='JavaScript'>alert('" + mesaj + "')</SCRIPT>");
- Yanıt Olarak İşaretleyen Serkan Canseven 25 Mayıs 2015 Pazartesi 14:49
- Düzenleyen Serkan Canseven 25 Mayıs 2015 Pazartesi 14:49 (Kod bloğu eklendi)
-
Baştan EF kullandığınızı söyleseydiniz daha detaylı yardımcı olurduk neyse. XmlWriter yerine Linq To XML ile yada XML serialize ile daha kolay şekilde xml oluşturabilirsiniz. XML Serialize için buradan inceleyebilirsiniz..
-