using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using Aspose.Html; namespace AspDemo02 { class Program { static void Main() { const string inputHtml = "http://www.motorcycle-usa.com/street-bike-buyers-guide/"; const string outputHtml = @"C:\asposedemo\files\bikes.html"; var bikes = RetrieveBikes(inputHtml); GenerateBikesDocs(outputHtml, bikes); } private static List RetrieveBikes(string url) { List bikes = new List(); Console.WriteLine("Loading..."); Aspose.Html.HTMLDocument document; try { document = new Aspose.Html.HTMLDocument(new Aspose.Html.Url(url)); } catch (Exception ex) { Console.WriteLine("Error: {0}", ex.Message); return null; } Console.WriteLine("Processing..."); var details = document.QuerySelectorAll("div.results-display"); var images = document.QuerySelectorAll("div.results-display2"); for (int i = 0; i < details.Length; i++) { bikes.Add(new StreetBike { Year = uint.Parse(details[i].QuerySelector("div.year").TextContent), Brand = details[i].QuerySelector("div.make").TextContent, Model = details[i].QuerySelector("div.model").TextContent, ImageLink = images[i].QuerySelector("div.image").ParentElement.GetElementsByTagName("img").First().GetAttribute("src") }); }; return bikes; } private static void GenerateBikesDocs(string outputHtml, List bikes) { var document = new Aspose.Html.HTMLDocument(); Console.WriteLine("Generating..."); HTMLTableElement table = document.CreateElement("table") as HTMLTableElement; HTMLTableSectionElement tHead = document.CreateElement("thead") as HTMLTableSectionElement; HTMLTableRowElement headRow = document.CreateElement("tr") as HTMLTableRowElement; HTMLTableCellElement headYear = document.CreateElement("th") as HTMLTableCellElement; headYear.TextContent = "Year"; HTMLTableCellElement headBrand = document.CreateElement("th") as HTMLTableCellElement; headBrand.TextContent = "Brand"; HTMLTableCellElement headModel = document.CreateElement("th") as HTMLTableCellElement; headModel.TextContent = "Model"; HTMLTableCellElement headImage = document.CreateElement("th") as HTMLTableCellElement; headImage.TextContent = "Image"; headRow.AppendChild(headYear); headRow.AppendChild(headBrand); headRow.AppendChild(headModel); headRow.AppendChild(headImage); tHead.AppendChild(headRow); HTMLTableSectionElement tBody = document.CreateElement("tbody") as HTMLTableSectionElement; foreach (var streetBike in bikes) { HTMLTableRowElement row = document.CreateElement("tr") as HTMLTableRowElement; HTMLTableCellElement cellYear = document.CreateElement("td") as HTMLTableCellElement; HTMLTableCellElement cellBrand = document.CreateElement("td") as HTMLTableCellElement; HTMLTableCellElement cellModel = document.CreateElement("td") as HTMLTableCellElement; HTMLTableCellElement cellImage = document.CreateElement("td") as HTMLTableCellElement; HTMLImageElement imgElement = document.CreateElement("img") as HTMLImageElement; cellYear.TextContent = streetBike.Year.ToString(); cellBrand.TextContent = streetBike.Brand; cellModel.TextContent = streetBike.Model; row.AppendChild(cellYear); row.AppendChild(cellBrand); row.AppendChild(cellModel); imgElement.Src = streetBike.ImageLink; imgElement.Width = 320; imgElement.Width = 240; imgElement.Alt = $"{streetBike.Brand} {streetBike.Model} ({streetBike.Year})"; cellImage.AppendChild(imgElement); row.AppendChild(cellImage); tBody.AppendChild(row); } table.AppendChild(tHead); table.AppendChild(tBody); document.Body.AppendChild(table); document.Save(outputHtml); } } }