none
Seçenekli Xml Oluşturma Hakkında Yardım! RRS feed

  • 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?

    19 Mayıs 2015 Salı 07:54

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)
    19 Mayıs 2015 Salı 12:16

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.

    19 Mayıs 2015 Salı 08:25
  • RIGHT JOIN ile deneyin bi.

    oguzkurtcuoglu.com


    19 Mayıs 2015 Salı 09:06
  • Ö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>");

                                                                                         
    19 Mayıs 2015 Salı 09:15
  • 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)
    19 Mayıs 2015 Salı 12:16
  • 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..

    oguzkurtcuoglu.com


    19 Mayıs 2015 Salı 13:20
  • Baştan EF kullanmıyordum daha sonra denedim ve olumlu sonuç verdi.XML Serialize yi inceliyorum.Vakit ayırıp önerilerde bulunduğunuz için teşekkür ederim.
    19 Mayıs 2015 Salı 14:04