2016-12-23 8 views
7

में छवि का नाम प्राप्त करें मैं एनओपीकॉमर्स वेबसाइट से उत्पादों की सूची के साथ एक्सएमएल बनाना चाहता हूं। चूंकि छवि बाइनरी में है, इसलिए मुझे छवि का नाम प्राप्त करने का कोई तरीका नहीं मिल रहा है (मुझे छवि छवि को छवि पर प्रदर्शित न करने की आवश्यकता है) कोई विचार? मेरी याद आ रही कोड/images/अंगूठे की कतार में है/नोपॉमर्स

topsystemDataClassesDataContext db = new topsystemDataClassesDataContext(); 
    XmlTextWriter writer = new XmlTextWriter(path + "/Products_" + catid + ".xml", System.Text.Encoding.UTF8); 
    writer.WriteStartDocument(true); 
    writer.Formatting = Formatting.Indented; 
    writer.Indentation = 2; 
    writer.WriteStartElement("store"); 

    //CREATE-SCREENS 
    var allProducts = (from p in db.Product_Category_Mappings 
         where p.CategoryId == catid 
         join s in db.Products 
        on p.ProductId equals s.Id 

         join im in db.Product_Picture_Mappings 
         on p.ProductId equals im.ProductId 

         join imag in db.Pictures 
         on im.PictureId equals imag.Id 
         select new 
         { 
          s.Name, 
          s.Id, 
          s.Price, 
          s.ShortDescription, 
          s.BackorderModeId, 
          im.PictureId, 
          imag.PictureBinary 
         }).ToList(); 


    foreach (var item in allProducts) 
    { 
     writer.WriteStartElement("product"); 
     writer.WriteStartElement("PRODUCT_URL"); 
     writer.WriteString("http://www.topsystems.co.il/Product.aspx?ProductId=" + item.Id); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("product_name"); 
     writer.WriteString(item.Name); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("MODEL"); 
     writer.WriteString(item.BackorderModeId.ToString()); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("CATALOG_NUMBER"); 
     writer.WriteString("0"); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("DETAILS"); 
     writer.WriteString(item.ShortDescription); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("CURRENCY"); 
     writer.WriteString("ILS"); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("PRICE"); 
     writer.WriteString(item.Price.ToString()); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("SHIPMENT_COST"); 
     writer.WriteString("0"); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("DELIVERY_TIME"); 
     writer.WriteString("3"); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("MANUFACTURER"); 
     writer.WriteString("ללא"); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("WARRANTY"); 
     writer.WriteString("ללא"); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("IMAGE"); 
     writer.WriteString("http://www.topsystems.co.il/content/images/thumbs/"); 
     writer.WriteEndElement(); 

     writer.WriteStartElement("TAX"); 
     writer.WriteString("0"); 
     writer.WriteEndElement(); 


     writer.WriteEndElement(); 
    } 
    writer.WriteEndElement(); 
    writer.WriteEndDocument(); 
    writer.Close(); 

    Response.Clear(); 
    Response.Buffer = true; 
    Response.Charset = ""; 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.ContentType = "application/xml"; 
    Response.WriteFile(Server.MapPath("~/zap/Products_" + catid + ".xml")); 
    Response.Flush(); 
    Response.End(); 
+0

कृपया जोड़ने नमूना लिंक आप चाहते हैं और नमूना छवि नाम Doyou –

+0

लगाना चाहते हैं मुझे लगता है कि आप करने जा रहे हैं है प्राप्त करने के लिए छवि का नाम प्राप्त करने के लिए एचटीएमएल टैग को स्क्रैप करना होगा। – phil

उत्तर

2

Xml बाइनरी डेटा का समर्थन नहीं करता है, आप इसे एक पाठ प्रारूप में बदलने की वजह से Xml एक मालिश प्रारूप के रूप में प्रयोग किया जाता है है। आपको smth की जरूरत है। इस तरह: यह यहाँ XmlReader के लिए एक विकल्प है binary-xml

byte[] binaryData; 
try 
{ 
    binaryData = System.Convert.FromBase64String(base64String); 
} 

:

string text = System.Text.Encoding.UTF8.GetString(data); 

यहाँ की कड़ी है। alternative

विज्ञापन यदि आप XmlReader के साथ चिपके हुए कर रहे हैं इस लागू करने के लिए प्रयास करें::

writer.WriteStartElement("Image"); 
writer.WriteBase64(fileData[1], 0, fileData[1].Length); 

इसके अलावा इस देखें: stack-discussion

मुझे यकीन है कि अगर यह तुम्हारी मदद करेगा नहीं कर रहा हूँ इस लिंक की जाँच करें। इस के साथ इतना अनुभव नहीं है, लेकिन अगर यह किसी भी मदद

3

का होगा यदि मैं गलत नहीं कर रहा हूँ मुझे खुशी है, तो एकल उत्पाद एक से अधिक चित्रों हो सकता है, शायद आपको लगता है कि उसी के लिए पाश का उपयोग करना ।

आपके पास उत्पाद आईडी हैं, तो आप तस्वीर एसईओ नाम प्राप्त करने के लिए चित्र सेवा का उपयोग कर सकते हैं।

चित्र सेवा GetPicturesByProductId आप तस्वीरों की एक सूची देता है और आपको बस इसे seoname

var pictures = _pictureService.GetPicturesByProductId(items.id) 

foreach(item in pictures) 
{ 
    writer.WriteStartElement("IMAGE"); 
    writer.WriteString(item.SeoFilename); 
    writer.WriteEndElement(); 
}