private void ProcessPage(HtmlNode node, int level, ProcessPass pass, CardDetails cardDetails, AttributeCardType attributeType) { if (VisitedNodes.Contains(node)) return; VisitedNodes.Add(node); switch (pass) { case ProcessPass.Details: if (NodeHasCardAttributeOfValue(node,attributeType)) { var resultNodes = new List<HtmlNode>(); HtmlNodeHelpers.FindChildNodesInOrderBelowLevel(node.ChildNodes.First(), 0, new List<HtmlNode>(), resultNodes); CardDetailEntry entry = ExtractCardFieldFromNodeListHelper.Extract(resultNodes); cardDetails.AddEntry(entry); } break; case ProcessPass.Image: if (NodeHasAssetAttributeOfInterest(node,attributeType)) { //((CardDetailEntryString)cardDetails.GetEntry(CardFieldName.CardName)).Value CardDetailEntry entry = ExtractImagePathFromHtmlHelper.ExtractImagePath(node.OuterHtml); cardDetails.AddEntry(entry); } break; } foreach (HtmlNode child in node.ChildNodes) { ProcessPage(child, level + 1, pass, cardDetails,attributeType); } if (node.NextSibling != null) { ProcessPage(node.NextSibling, level, pass, cardDetails,attributeType); } }