2016-12-23 6 views
7

Ich möchte XML mit Liste der Produkte von Nopcommerce Website erstellen. Da das Bild binär ist, finde ich keinen Weg, nur den Namen des Bildes zu erhalten (ich brauche nur den Bildnamen, um es nicht auf Bild anzuzeigen) irgendeine Idee? mein fehlender Code ist in der Linie von/images/thumbs/Name des Bildes in Nopcommerce

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

Bitte fügen Probe Link und Beispielbild Name doyou –

+0

wollen finden möchten, ich glaube, Sie wollen müssen die html Tags schaben, um den Namen des Bildes zu erhalten. – phil

Antwort

2

Xml Binärdaten nicht unterstützt, können Sie es in ein Textformat umwandeln müssen, da XML als Massage Format verwendet wird. Du brauchst etw. dies wie:

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

Hier ist der Link: binary-xml

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

Dieses hier eine Alternative für XmlReader ist. Überprüfen Sie diesen Link: alternative

Ad wenn Sie mit XmlReader kleben versuchen, dies zu implementieren:

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

auch sehen: stack-discussion

Ich bin nicht sicher, ob diese Ihnen helfen. Nicht so viel erfahren, aber ich bin froh, wenn dies keine Hilfe sein wird

3

Wenn ich nicht falsch bin, dann kann einzelnes Produkt mehr als ein Bild haben, wahrscheinlich müssen Sie Schleife für das gleiche verwenden .

Da Sie Produkt-IDs haben, können Sie Bild-Service verwenden, um Bild Seo Name zu erhalten.

Bild Service GetPicturesByProductId gibt Ihnen eine Liste der Bilder und Sie müssen nur seoname es bekommen

var pictures = _pictureService.GetPicturesByProductId(items.id) 

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