public override dynamic ProcessDOMNode(XElement xmlParceRule, IDOMElement expectedDOMElement, PostModel postModel) { IPostContentModel result = null; var searchCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == SEARCH_CRITEREA_NODE_NAME.ToLower()); var expectedNode = SearchForNode(searchCritereaNode.Elements(), expectedDOMElement, postModel); if (expectedNode != null) { var imgUrls = new List <string>(); Parallel.ForEach(expectedNode.Childs, child => { if (!child.BadTag) { var subSearchCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == SUB_SEARCH_CRITEREA_NODE_NAME.ToLower()); var expectedSubNode = SearchForNode(subSearchCritereaNode.Elements(), child, postModel); if (expectedSubNode != null) { var imgUrl = string.Empty; var getCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == GET_CRITEREA_NODE_NAME.ToLower()); var getCriterea = getCritereaNode.Elements().First(); var getResult = Regex.Matches(expectedSubNode.GetContent(getCriterea.Name.ToString()), getCriterea.Value, RegexOptions.IgnoreCase); var trimCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == TRIM_CRITEREA_NODE_NAME.ToLower()); foreach (Match resultPart in getResult) { if (trimCritereaNode != null) { imgUrl += (trimCritereaNode.Attributes().Any(attr => attr.Name.ToString().ToLower() == STRING_TRIM_ATTRIBUTE_NAME.ToLower() && bool.Parse(attr.Value)) ? resultPart.Value.Split(trimCritereaNode.Value.Split(new[] { ' ' }), StringSplitOptions.RemoveEmptyEntries)[0] : resultPart.Value.Trim(trimCritereaNode.Value.ToArray())).Trim(); } else { imgUrl += resultPart.Value.Trim(); } } var extNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == IMG_EXT_NAME.ToLower()); if (extNode != null && !string.IsNullOrEmpty(imgUrl)) { imgUrl += string.Format(".{0}", extNode.Value.Trim()); } if (string.IsNullOrEmpty(imgUrl)) { Logger.LogException("ImgContentXMLParcer factory returned an empty link", LogTypeEnum.CORE); } else { var filename = Path.GetFileNameWithoutExtension(imgUrl); if (string.IsNullOrEmpty(filename)) { Logger.LogException(string.Format("ImgContentXMLParcer factory returned a link without name: {0}", imgUrl), LogTypeEnum.CORE); } else { var extension = Path.GetExtension(imgUrl); if (string.IsNullOrEmpty(extension)) { Logger.LogException(string.Format("ImgContentXMLParcer factory returned a link without extension: {0}", imgUrl), LogTypeEnum.CORE); } else { imgUrls.Add(imgUrl); } } } } } }); if (imgUrls.Any()) { result = PostContentModelfactory.GetInitializedFactory(PostContentTypeEnum.Img, postModel.PostContent.Count, imgUrls.ToArray()); } else { Logger.LogException("ImgContentXMLParcer factory returned no records", LogTypeEnum.CORE); } } return(result); }