private static List<Ingredient> ExtractIngredients(HtmlNode ingredientsNode) { List<Ingredient> ingredients = new List<Ingredient>(); string[] ingredientLines = ingredientsNode.InnerHtml.Split(new string[] { "<br>" }, StringSplitOptions.RemoveEmptyEntries); foreach (string ingredientLine in ingredientLines) { string ingredientName = ingredientLine; Fraction incredientAmountFraction = Fraction.Zero; double incredientWeight = 1; string[] ingredientParsed = null; string measureUnit = GetMeasureUnit(ingredientLine); if (measureUnit != null) { ingredientParsed = ingredientLine.Split(new string[] { measureUnit }, StringSplitOptions.RemoveEmptyEntries); } else { ingredientParsed = ingredientLine.Split(null as string[], 2, StringSplitOptions.RemoveEmptyEntries); } try { if (ingredientParsed.Length == 1) { incredientAmountFraction = new Fraction(1); ingredientName = ingredientParsed[0].Trim(' ', '-'); } else { string incredientAmount = ingredientParsed[0] .Trim(' ', '-') .Replace("חצי", "1/2").Replace("½", "1/2") .Replace("שליש", "1/3") .Replace("רבע", "1/4"); incredientAmountFraction = new Fraction(incredientAmount); ingredientName = ingredientParsed[1].Trim(' ', '-'); if (measureUnit != null) { incredientWeight = incredientAmountFraction.ToDouble() * IncredientAmount.MEASURE_UNITS[measureUnit]; } } } catch (Exception e) { log.WarnFormat("Failed to parse ingredient: {0} {1}", ingredientLine, e); } ProductBasicData product = FindProductByName(ingredientName); string productId = null, productName = null; NutritionFacts nutFacts = new NutritionFacts(); if (product != null) { productId = product.ProductId; productName = product.ProductName; if (product.ExtendedData != null && product.ExtendedData.NutritionTable != null) { nutFacts = new NutritionFacts(product.ExtendedData.NutritionTable); } } Ingredient ingredient = new Ingredient() { Name = ingredientName, ProductId = productId, ProductName = productName, NutritionFacts = nutFacts, Amount = new IncredientAmount() { MeasureUnit = measureUnit, Amount = incredientAmountFraction, Weight = incredientWeight } }; ingredients.Add(ingredient); } return ingredients; }