private List <CartItem> ParseCartItems(IEnumerable <XElement> container) { List <CartItem> result = new List <CartItem>(); try { if (container != null) { foreach (var xEl in container) { var src = xEl.Descendants(_ns + "td") .WhereAttributeEquals("class", "item-image") .FirstOrNewXElement() .Elements(_ns + "img") .FirstOrNewXElement() .AttributeValue("src"); var detailsContainer = xEl.Descendants(_ns + "div") .WhereAttributeEquals("class", "product-list-item") .FirstOrNewXElement(); var name = detailsContainer.Elements(_ns + "div") .WhereAttributeEquals("class", "name") .FirstOrNewXElement() .ElementValue(); var href = detailsContainer.Elements(_ns + "div") .WhereAttributeEquals("class", "name") .FirstOrNewXElement() .Elements(_ns + "a") .FirstOrNewXElement() .AttributeValue("href") .Replace(Config.Urls.BaseUrl, string.Empty); var productId = detailsContainer.Elements(_ns + "div") .WhereAttributeEquals("class", "sku") .FirstOrNewXElement() .Elements(_ns + "span") .WhereAttributeEquals("class", "value") .FirstOrNewXElement() .ElementValue(); var sku = ParsingHelper.GetSkuFromHref(href); var color = detailsContainer.Descendants(_ns + "span") .WhereAttributeEquals("class", "value Color") .FirstOrNewXElement() .ElementValue(); var size = detailsContainer.Descendants(_ns + "span") .WhereAttributeEquals("class", "value Size") .FirstOrNewXElement() .ElementValue(); var width = detailsContainer.Descendants(_ns + "span") .WhereAttributeEquals("class", "value Width") .FirstOrNewXElement() .ElementValue(); var design = detailsContainer.Descendants(_ns + "span") .WhereAttributeEquals("class", "value Gift Card Design") .FirstOrNewXElement() .ElementValue(); var gcValue = detailsContainer.Descendants(_ns + "span") .WhereAttributeEquals("class", "value Gift Card Value") .FirstOrNewXElement() .ElementValue(); var qtyStr = xEl.Descendants(_ns + "td") .WhereAttributeEquals("class", "item-quantity") .FirstOrNewXElement() .Elements(_ns + "input") .FirstOrNewXElement() .AttributeValue("value"); var qty = 0; Int32.TryParse(qtyStr, out qty); var itemPrice = xEl.Descendants(_ns + "span") .WhereAttributeEquals("class", "price-standard") .FirstOrNewXElement() .ElementValue(); var specialPrice = xEl.Descendants(_ns + "span") .WhereAttributeEquals("class", "price-sales") .FirstOrNewXElement() .ElementValue(); var listPrice = xEl.Descendants(_ns + "span") .WhereAttributeEquals("class", "price-unadjusted") .FirstOrNewXElement() .ElementValue(); if (string.IsNullOrEmpty(itemPrice)) { itemPrice = specialPrice; specialPrice = string.Empty; } var totalPrice = xEl.Descendants(_ns + "span") .WhereAttributeEquals("class", "price-total") .FirstOrNewXElement() .ElementValue(); var totalPriceLabel = string.Empty; if (string.IsNullOrEmpty(totalPrice)) { totalPrice = xEl.Descendants(_ns + "span") .WhereAttributeEquals("class", "price-adjusted-total") .FirstOrNewXElement() .ElementValue(); totalPriceLabel = xEl.Descendants(_ns + "div") .WhereAttributeEquals("class", "promo-adjustment") .Where(x => !string.IsNullOrEmpty(x.ElementValue())) .FirstOrNewXElement() .ElementValue(); } var availabilityMessage = xEl.Descendants(_ns + "li") .WhereAttributeEquals("class", "not-available") .FirstOrNewXElement() .ElementValue(); result.Add(new CartItem { Image = new Image { Src = src }, Name = name, Href = href, ProductId = productId, Sku = sku, Color = color, Size = size, Width = width, Design = design, GCValue = gcValue, Quantity = qty, ItemPrice = new Price(itemPrice) { Label = "Reg. " }, SpecialPrice = new Price(specialPrice) { Label = "Sale " }, ListPrice = new Price(listPrice) { Label = "List Price" }, TotalPrice = new Price(totalPrice) { Label = totalPriceLabel }, AvailabilityMessage = availabilityMessage }); } } } catch (Exception ex) { _errors.Add(ex.Handle( "MadServ.CartService.ParseCartItems", ErrorSeverity.FollowUp, ErrorType.Parsing )); } return(result); }