2016-12-23 10 views
7

Nopcommerceのウェブサイトから製品のリストを使ってXMLを作成したいと思います。イメージはバイナリであるので、イメージの名前だけを取得する方法を見つけることができません(私はイメージにイメージ名を表示する必要はありません)。私の不足しているコードは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

です取得する必要がdoyouは、私はあなたがしようとしていると思わ –

+0

を見つけたいあなたがしたいサンプルリンクとサンプル画像名を追加してください。画像の名前を取得するには、HTML タグを掻き分けなければなりません。 – phil

答えて

2

XMLは、XMLがマッサージフォーマットとして使用されているので、テキスト形式に変換する必要があり、バイナリデータをサポートしていません/ /画像/親指のラインです。あなたは額を必要とします。このように:ここで

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

リンクされています。binary-xml

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

これここでは、XmlReaderのための代替です。あなたがたXmlReaderに固執している場合alternative

広告この実装しよう:このリンクをチェックし、私は、これはあなたを助けるかどうかわからないんだけどstack-discussion

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

をもこれを参照してください。このようなことはあまり経験はありませんが、これがどんな援助であれ嬉しいです

3

私が間違っていない場合は、が1つの製品に複数の画像が含まれている可能性があります。

製品IDがあるので、写真サービスを使用して写真の名前を取得することができます。

ピクチャーサービスGetPicturesByProductIdは、あなたの写真のリストを与え、あなたはそれがseoname

var pictures = _pictureService.GetPicturesByProductId(items.id) 

foreach(item in pictures) 
{ 
    writer.WriteStartElement("IMAGE"); 
    writer.WriteString(item.SeoFilename); 
    writer.WriteEndElement(); 
} 
関連する問題