GetAttributeValue() public méthode

Helper method to get the value of an attribute of this node. If the attribute is not found, the default value will be returned.
public GetAttributeValue ( string name, bool def ) : bool
name string The name of the attribute to get. May not be null.
def bool The default value to return if not found.
Résultat bool
        public bool SetValue(HtmlNode n, string value)
        {
            if (n is HtmlNode && n.Name == "select")
            {
                foreach (HtmlNode o in n.SelectNodes("option"))
                {
                    o.SetAttributeValue("selected", o.GetAttributeValue("value", "").Equals(value) ? "selected" : "");
                }
                return true;
            }

            if (n is HtmlNode && n.Name == "input")
            {
                switch (n.GetAttributeValue("type", ""))
                {
                    case "radio":
                        n.SetAttributeValue("checked", n.GetAttributeValue("value", "").Equals(value) ? "checked" : "");
                        break;
                    default:
                        n.SetAttributeValue("value", value);
                        break;
                }
                n.SetAttributeValue("value", value);
                return true;
            }

            return false;
        }
Exemple #2
1
		public async Task<HtmlNode> VisitAsync(VisitingContext context, HtmlNode node)
		{
			// We're only interested in stylesheets.
			if (node.GetAttributeValue("rel", null) != "stylesheet")
				return node;
			var href = node.GetAttributeValue("href", null);
			if (href == null)
				return node;
			var hrefUri = new Uri(href, UriKind.RelativeOrAbsolute);
			if (!hrefUri.IsAbsoluteUri)
			{
				hrefUri = new Uri(context.Address, hrefUri);
			}

			// Get the stylesheet and insert it inline.
			var content = default(string);
			try
			{
				content = await context.WebClient.DownloadAsync(hrefUri);
			}
			catch (WebException)
			{
				return node;
			}
			content = "<style>" + content + "</style>";
			return HtmlNode.CreateNode(content);
		}
Exemple #3
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="formNode"></param>
        /// <param name="session"></param>
        /// <param name="baseUrl"></param>
        /// <param name="charset">The character set used in the previoius response (from which the form originates).</param>
        public Form(HtmlNode formNode, ISession session, Uri baseUrl, string charset)
        {
            Condition.Requires(formNode, "formNode").IsNotNull();
              Condition.Requires(session, "session").IsNotNull();
              Condition.Requires(baseUrl, "baseUrl").IsNotNull();

              if (!formNode.Name.Equals("form", StringComparison.OrdinalIgnoreCase))
            throw new ArgumentException(string.Format("Cannot create HTML form from '{0}' node.", formNode.Name));

              Action = new Uri(baseUrl, formNode.GetAttributeValue("action", ""));
              Method = formNode.GetAttributeValue("method", "get");
              Session = session;
              BaseUrl = baseUrl;
              ResponseCharset = charset;

              string enctype = formNode.GetAttributeValue("enctype", null);
              EncodingType = (enctype != null ? new MediaType(enctype) : MediaType.ApplicationFormUrlEncoded);

              AcceptCharset = formNode.GetAttributeValue("accept-charset", null);

              Values = new Hashtable();
              SubmitElements = new List<SubmitElement>();

              ParseInputs(formNode);
        }
Exemple #4
0
 private static int GetPageNumber(HtmlNode threadNode)
 {
     if (threadNode != null && !string.IsNullOrEmpty(threadNode.GetAttributeValue("value", string.Empty)))
     {
         return Convert.ToInt32(threadNode.GetAttributeValue("value", string.Empty));
     }
     return 1;
 }
        public override string Convert(HtmlNode node)
        {
            string alt = node.GetAttributeValue("alt", string.Empty);
            string src = node.GetAttributeValue("src", string.Empty);
            string title = this.ExtractTitle(node);

            title = title.Length > 0 ? string.Format(" \"{0}\"", title) : "";

            return string.Format("![{0}]({1}{2})", alt, src, title);
        }
Exemple #6
0
 public static Note Parse(HtmlNode Node)
 {
     string Grade = Node.InnerText.Trim();
     string Name = Node.GetAttributeValue("title", "Névtelen jegy");
     string Href = Node.GetAttributeValue("href", "");
     Match Match = Regex.Match(Href, "jegyId=(?<id>[0-9]+)", RegexOptions.IgnoreCase);
     int ID = int.Parse(Match.Groups["id"].Value);
     string T = Node.GetAttributeValue("class", "jegy2");
     NoteType Type = (NoteType)(int.Parse(T.Substring(T.Length - 1, 1)));
     return new Note(ID, Grade, Name, Type);
 }
 public static string GetTargetFromFilter(HtmlNode node, IFilter filter)
 {
     switch (filter.GetNodeType())
     {
         case NodeType.Image:
             return node.GetAttributeValue("src", "");
         case NodeType.Link:
             return node.GetAttributeValue("href", "");
         default:
             return "";
     }
 }
        /// <summary>
        ///     Parses a forum post in a thread.
        /// </summary>
        /// <param name="postNode">The post HTML node.</param>
        public void Parse(HtmlNode postNode)
        {
            User = ForumUserEntity.FromPost(postNode);

            HtmlNode postDateNode =
                postNode.Descendants()
                    .FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Equals("postdate"));
            string postDateString = postDateNode == null ? string.Empty : postDateNode.InnerText;
            if (postDateString != null)
            {
                PostDate = postDateString.WithoutNewLines().Trim();
            }

            PostIndex = ParseInt(postNode.GetAttributeValue("data-idx", string.Empty));

            var postId = postNode.GetAttributeValue("id", string.Empty);
            if (!string.IsNullOrEmpty(postId) && postId.Contains("#"))
            {
                PostId =
                    Int64.Parse(postNode.GetAttributeValue("id", string.Empty)
                        .Replace("post", string.Empty)
                        .Replace("#", string.Empty));
            }
            else if (!string.IsNullOrEmpty(postId) && postId.Contains("post"))
            {
                PostId =
                    Int64.Parse(postNode.GetAttributeValue("id", string.Empty)
                        .Replace("post", string.Empty));
            }
            else
            {
                PostId = 0;
            }
         
            var postBodyNode = postNode.Descendants("td")
                .FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Equals("postbody"));
            this.FixQuotes(postBodyNode);
            PostHtml = postBodyNode.InnerHtml;
            HtmlNode profileLinksNode =
                    postNode.Descendants("td")
                        .FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Equals("postlinks"));
            HtmlNode postRow =
                postNode.Descendants("tr").FirstOrDefault();

            if (postRow != null)
            {
                HasSeen = postRow.GetAttributeValue("class", string.Empty).Contains("seen");
            }

            User.IsCurrentUserPost =
                profileLinksNode.Descendants("img")
                    .FirstOrDefault(node => node.GetAttributeValue("alt", string.Empty).Equals("Edit")) != null;
        }
		static AnchorAnalysis AnalyseAnchor(HtmlNode anchor)
		{
			var href = anchor.GetAttributeValue("href", null);
			var rel = anchor.GetAttributeValue("rel", null);
			var title = anchor.GetAttributeValue("title", null);
			var text = anchor.InnerText;

			// todo: determine if its an offsite link?
			// determine if it contains a title, has text - if not, image? adivse

			return new AnchorAnalysis(text, title, href, rel, new Message[0]);
		}
        /// <summary>
        /// Parses a thread HTML node to extract the information from it.
        /// </summary>
        /// <param name="threadNode">The thread HTML node.</param>
        public void Parse(HtmlNode threadNode)
        {
            this.Name = WebUtility.HtmlDecode(threadNode.Descendants("a").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Equals("thread_title")).InnerText);

            this.KilledBy = threadNode.Descendants("a").LastOrDefault(node => node.GetAttributeValue("class", string.Empty).Equals("author")).InnerText;
            this.IsSticky = threadNode.Descendants("td").Any(node => node.GetAttributeValue("class", string.Empty).Contains("title_sticky"));
            this.IsLocked = threadNode.GetAttributeValue("class", string.Empty).Contains("closed");
            this.CanMarkAsUnread = threadNode.Descendants("a").Any(node => node.GetAttributeValue("class", string.Empty).Equals("x"));
            this.HasBeenViewed = this.CanMarkAsUnread;
            this.Author = threadNode.Descendants("td").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Equals("author")).InnerText;
            if (threadNode.Descendants("a").Any(node => node.GetAttributeValue("class", string.Empty).Equals("count")))
            {
                this.RepliesSinceLastOpened = Convert.ToInt32(threadNode.Descendants("a").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Equals("count")).InnerText);
            }
            if (threadNode.Descendants("td").Any(node => node.GetAttributeValue("class", string.Empty).Contains("replies")))
            {
                this.ReplyCount = Convert.ToInt32(threadNode.Descendants("td").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Contains("replies")).InnerText);
            }
            else
            {
                this.ReplyCount = 1;
            }

            // Isn't this user configurable?
            this.TotalPages = (this.ReplyCount / 40) + 1;
            this.Location = Constants.BASE_URL + threadNode.Descendants("a").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Equals("thread_title")).GetAttributeValue("href",string.Empty) + Constants.PER_PAGE;
            this.ThreadId = Convert.ToInt64(threadNode.Descendants("a").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Equals("thread_title")).GetAttributeValue("href",string.Empty).Split('=')[1]);
            this.ImageIconLocation = threadNode.Descendants("td").FirstOrDefault(node => node.GetAttributeValue("class", string.Empty).Equals("icon")).Descendants("img").FirstOrDefault().GetAttributeValue("src", string.Empty);
        }
 private static bool IsUnwantedLanguageDiv(HtmlNode div)
 {
     return div.GetAttributeValue("class", "").Equals("libCScode")
            &&
            !div.Element("div").Element("div").InnerText.Trim().Equals("c#",
                                                                       StringComparison.CurrentCultureIgnoreCase);
 }
Exemple #12
0
        private MarketRateModel BuildMarketRate(HtmlNode monthNode)
        {
            var result = new MarketRateModel();
            string value = "";
            var dataCode = monthNode.GetAttributeValue("href", "http://finance.ifeng.com/app/hq/stock/sh000001/");
            if ("http://finance.ifeng.com/app/hq/stock/sh000001/" == dataCode)
            {
                value = monthNode.NextSibling.NextSibling.InnerText.Trim();
                value = value.Split(' ')[0];
                result.Type = RateType.StockShangzheng;
                result.Rate = decimal.Parse(value);
            }
            else if ("http://finance.ifeng.com/app/hq/stock/sz399001/" == dataCode)
            {
                value = monthNode.NextSibling.NextSibling.InnerText.Trim();
                value = value.Split(' ')[0];
                result.Type = RateType.StockShenzhen;
                result.Rate = decimal.Parse(value);
            }
            else
            {
                return null;
            }

            result.CreateTime = DateTime.Now;
            result.RateDay = DateTime.Now.Date;
            result.Source = SourceType.eIfeng;

            return result;
        }
Exemple #13
0
 /// <summary>
 /// 递归遍历内容中的图片
 /// </summary>
 /// <param name="node"></param>
 /// <returns></returns>
 public static void EachImages(HtmlNode node, string baseUri = "")
 {
     //判断是否有子标签
     if (node.HasChildNodes)
         foreach (HtmlNode nn in node.ChildNodes)
             EachImages(nn, baseUri);
     else if (node.Name == "img")
     {
         //图片
         string url = node.GetAttributeValue("src", "");
         if (url == "") return;
         //获取图片信息,生成新的路径
         //getimages/{Year}/{Week}/{FileName}
         string exe = Path.GetExtension(url).TrimStart(new char[] { '.' });
         string fileName = Guid.NewGuid().ToString() + "." + exe;
         int day = DateTime.Now.Day;
         //相对路径
         string fullName = string.Format("autoimages\\{0}\\{3}\\{1}\\{2}." + exe, DateTime.Now.Year, day <= 10 ? 1 : (day <= 20 ? 2 : 3), Guid.NewGuid().ToString(), DateTime.Now.Month);
         //网站
         string urlNew = "/" + fullName.Replace("\\", "/");
         node.SetAttributeValue("src", urlNew);
         //保存到本地
         Uri uri = baseUri == "" ? new Uri(url) : new Uri(new Uri(baseUri), url);
         SaveImg(uri.AbsoluteUri, fullName);
     }
 }
Exemple #14
0
		public async Task<HtmlNode> VisitAsync(VisitingContext context, HtmlNode node)
		{
			var src = node.GetAttributeValue("src", null);
			if (src == null)
				return node;

			// Take care if the src starts with two slashes.
			if (src.StartsWith("//"))
			{
				src = "http:" + src;
			}

			var srcUri = new Uri(src, UriKind.RelativeOrAbsolute);
			if (!srcUri.IsAbsoluteUri)
			{
				srcUri = new Uri(context.Address, srcUri);
			}

			// Get the script and insert it inline.
			var content = default(string);
			try
			{
				content = await context.WebClient.DownloadAsync(srcUri);
			}
			catch (WebException)
			{
				return node;
			}
			content = "<script>" + content + "</script>";
			return HtmlNode.CreateNode(content);
		}
Exemple #15
0
 private string GetLanguageFromConfluenceClassAttribute(HtmlNode node)
 {
     string val = node.GetAttributeValue("class", "");
     var rx = new System.Text.RegularExpressions.Regex(@"brush:\s?(:?.*);");
     var res = rx.Match(val);
     return res.Success ? res.Value : "";
 }
 public StineLinkTreeNode(HtmlNode node)
 {
     base.Text = HttpUtility.HtmlDecode(node.InnerHtml);
     URL = node.GetAttributeValue("href", "not_found");
     URL = HttpUtility.HtmlDecode(URL);
     HTML_NODE = node;
 }
        private bool ClassesMatches(HtmlNode node)
        {
            if (classes == null || classes.Length < 1)
            {
                return true;
            }

            string classString;

            if ((classString = node.GetAttributeValue("class", null)) != null)
            {
                string[] nodeClasses = classString.Split(' ');
                if (nodeClasses.Length <= 0) return false;
                bool allMatch = false;
                foreach (string filterClass in classes)
                {
                    bool localMatch = false;
                    foreach (string nodeClass in nodeClasses)
                    {
                        if (filterClass == nodeClass)
                        {
                            localMatch = true;
                        }
                    }
                    allMatch = localMatch;
                }
                return allMatch;
            }
            return false;
        }
Exemple #18
0
 private string GetLanguageFromHighlightClassAttribute(HtmlNode node)
 {
     string val = node.GetAttributeValue("class", "");
     var rx = new System.Text.RegularExpressions.Regex("highlight-([a-zA-Z0-9]+)");
     var res = rx.Match(val);
     return res.Success ? res.Value : "";
 }
 private ICollection<PostNodeBase> CreateLinkAttrNode(HtmlNode node, ICollection<PostNodeBase> res)
 {
     var linkUri = GetLinkText(node.GetAttributeValue("href", null));
     var uriService = Services.GetServiceOrThrow<IMakabaUriService>();
     var detectedLink = uriService.TryParsePostLink(linkUri);
     if (detectedLink != null)
     {
         return CreateNode(res, new PostNodeBoardLinkAttribute()
         {
             BoardLink = detectedLink
         });
     }
     var youtubeService = Services.GetServiceOrThrow<IYoutubeIdService>();
     var youtubeId = youtubeService.GetYoutubeIdFromUri(linkUri);
     if (youtubeId != null)
     {
         return CreateNode(res, new PostNodeBoardLinkAttribute()
         {
             BoardLink = new YoutubeLink()
             {
                 Engine = CoreConstants.Engine.Makaba,
                 YoutubeId = youtubeId
             }
         });
     }
     return CreateNode(res, new PostNodeLinkAttribute()
     {
         LinkUri = linkUri
     });
 }
Exemple #20
0
        public static BookInfo AmazonSearchBook(string title, string author)
        {
            BookInfo result = null;

            string authorTrim = "";

            Regex regex = new Regex(@"( [A-Z]\.)", RegexOptions.Compiled);
            Match match = Regex.Match(author, @"( [A-Z]\.)", RegexOptions.Compiled);

            if (match.Success)
            {
                foreach (Match m in regex.Matches(author))
                {
                    authorTrim = author.Replace(m.Value, m.Value.Trim());
                }
            }
            else
            {
                authorTrim = author;
            }
            if (title.IndexOf(" (") >= 0)
            {
                title = title.Substring(0, title.IndexOf(" ("));
            }

            string searchUrl = @"http://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Ddigital-text&field-keywords=" +
                               Uri.EscapeDataString(title + " " + authorTrim + " kindle edition");

            HAP.HtmlDocument searchDoc = new HAP.HtmlDocument();
            searchDoc.LoadHtml(HttpDownloader.GetPageHtml(searchUrl));
            HAP.HtmlNode node = searchDoc.DocumentNode.SelectSingleNode("//li[@id='result_0']");
            //At least attempt to verify it might be the same book?
            //Ignore case of title
            if (node != null && node.InnerText.IndexOf(title, StringComparison.OrdinalIgnoreCase) >= 0)
            {
                string foundASIN = node.GetAttributeValue("data-asin", "");
                node = node.SelectSingleNode(".//div/div/div/div[@class='a-fixed-left-grid-col a-col-right']/div/a");
                if (node != null)
                {
                    result           = new BookInfo(node.InnerText, author, foundASIN);
                    result.amazonUrl = node.GetAttributeValue("href", ""); // Grab the true link for good measure
                }
            }

            return(result);
        }
Exemple #21
0
        private static ThreadPostMetadata ParseIsIgnored(this ThreadPostMetadata post, HtmlNode postNode)
        {
            post.IsIgnored = false;
            var classAttribute = postNode.GetAttributeValue("class", string.Empty);
            if (classAttribute.ToLower().Contains("ignored"))
                post.IsIgnored = true;

            return post;
        }
Exemple #22
0
 private static DocumentObject AddHyperlink(DocumentObject section, HtmlNode node)
 {
     string href = node.GetAttributeValue("href", "");
     Hyperlink link;
     if (href.StartsWith("#"))
         link = GetParagraph(section).AddHyperlink(href.Substring(1), HyperlinkType.Bookmark);
     else
         link = GetParagraph(section).AddHyperlink(href, HyperlinkType.Web);
     return link;
 }
Exemple #23
0
        private static int ParseProjectId(HtmlNode node)
        {
            var link = node.GetAttributeValue("href", null);
            var splicedUrl = link.Split('/');
            if (splicedUrl.Length >= 4 && splicedUrl[4] != "users")
            {
                return Convert.ToInt32(splicedUrl[4]);
            }

            return 0;
        }
        private static ExternalReference GetExternalReference(HtmlNode externalReferenceNode, int index)
        {
            string referenceUrl = externalReferenceNode.GetAttributeValue("href", string.Empty);
            string referenceId = GetExternalReferenceId(index);

            externalReferenceNode.InnerHtml = string.Format("[{0}]", index);
            externalReferenceNode.SetAttributeValue("href", "#" + referenceId);
            externalReferenceNode.SetAttributeValue("name", referenceId + BackLinkReferenceIdSuffix);

            return new ExternalReference { Index = index, Url = referenceUrl };
        }
		protected DateTime RetrieveToDateTime( HtmlNode node , string attribute ) {
			var value = node.GetAttributeValue( attribute , string.Empty );

			if ( string.IsNullOrEmpty( value ) ) {
				return DateTime.Now;
			}

			var epoch = new DateTime( 1970 , 1 , 1 , 0 , 0 , 0 );

			return epoch.AddSeconds( double.Parse( value ) );
		}
        public Item(HtmlNode code)
        {
            htmlCode = code;
            name = code.GetAttributeValue("data-name", ""); //full item name from the source (may include type)
            id = code.GetAttributeValue("data-id", ""); //either a number or "stock"

            //"unusual x", "unique x", "strange x", etc are all possibilities
            if (itemTypes.Contains(name.Split(' ')[0]))
            {
                //extract the type from the full itemname
                type = name.Remove(name.IndexOf(' '));
                //strip the type from the full itemname
                name = name.Remove(0, type.Length + 1);
            }

            level = code.GetAttributeValue("data-subtitle", "");

            HtmlNode paintNode = code.SelectSingleNode("div[@class='paint']");
            paint = paintNode != null ? paintNode.GetAttributeValue("style", "").Split(':')[1] : "";
        }
 private static void AddExCssStyle(this IXLWorksheet worksheet, int rowId, int colId, HtmlNode cell)
 {
     var css = cell.GetAttributeValue("style", "");
     var parser = new StylesheetParser();
     var stylesheet = parser.Parse(css);
     SimpleSelector color =
         stylesheet.RuleSets.SelectMany(x => x.Selectors)
                   .SelectMany(x => x.SimpleSelectors)
                   .FirstOrDefault(x => x.ElementName == "color");
     string thing = (color == null) ? "" : color.Child.Pseudo;
     worksheet.Cell(rowId, colId).Style.Font.FontColor = XLColor.FromName(thing);
 }
        private bool TryParseImage(HtmlNode node, out Image image)
        {
            image = null;

            var name = node.Name.ToLowerInvariant();
            if (name == "img") {
                var empty = "";
                var source = node.GetAttributeValue("src", empty);
                if (source != empty) {
                    int width;
                    int.TryParse(node.GetAttributeValue("width", empty), out width);

                    int height;
                    int.TryParse(node.GetAttributeValue("height", empty), out height);
                    image = new Image(source, width, height);
                    return true;
                }
            }

            return false;
        }
        protected override Uri GetFullPageUrl(HtmlNode selectOption, MangaBook mangaBook)
        {
            string selectOptionValueAttribute = selectOption.GetAttributeValue("value", "");

            string pageUrl = String.Format("{0}/{1}/{2}/{3}/{4}.html",
                mangaBook.UrlCategoryName,
                mangaBook.Title,
                mangaBook.Volume,
                mangaBook.Chapter,
                selectOptionValueAttribute);

            return String.IsNullOrEmpty(selectOptionValueAttribute) ? null : new Uri(HostUri, pageUrl);
        }
        public static int AddTd(this IXLWorksheet worksheet, int rowId, int colId, HtmlNode cell)
        {
            // add text
            worksheet.Cell(rowId, colId).Value = cell.InnerText;

            // add data type
            worksheet.Cell(rowId, colId).DataType = GetDataType(cell.InnerText);

            // colspan merge
            int colspan = cell.GetAttributeValue("colspan", 1);
            if (colspan > 1)
            {
                var mergeUs = worksheet.Range(rowId, colId, rowId, colId + (colspan - 1));
                mergeUs.Merge();
            }

            // Try style with CssStyleCollection
            var stylernater = CssStyleTools.Create();
            stylernater.Value = cell.GetAttributeValue("style", "");
            string color = stylernater["color"];
            if (!string.IsNullOrWhiteSpace(color))
            {
                // rgb(
                //var snot = "rgb(255, 0, 0)";
                var snot = color;
                var poo = snot.Substring(4, snot.Length-4);
                var foo = poo.Substring(0, poo.Length - 1);
                string[] noo = foo.Split(',');
                var goo = noo.Select(x => x.Trim());
                List<int> hoo = goo.Select(x => int.Parse(x)).ToList();
                worksheet.Cell(rowId, colId).Style.Font.FontColor = XLColor.FromArgb(hoo[0], hoo[1], hoo[2]); //.FromName(color);
            }
            // YAAHGHGhghghgh. This is just as bad as ExCss!

            // add style?
            //worksheet.AddExCssStyle(rowId, colId, cell);

            return colspan;
        }
 public static TextVisualProperties Update(this TextVisualProperties properties, HtmlNode element, CSS css)
 {
     var list = new List<string>
                {
                    element.Name
                };
     string attributeValue = element.GetAttributeValue("class", string.Empty);
     if (!string.IsNullOrEmpty(attributeValue))
     {
         list.Add(element.Name + "." + attributeValue);
         list.Add("." + attributeValue);
     }
     return properties.UpdateCss(css, list.ToArray());
 }
Exemple #32
0
        //static int nLevels = 64;
        //static Size testPadding = new Size(32, 32);
        //static double hitThreshold = 0;
        //static int groupThreshold = 2;
        //static double scaleStep = 1.05;
        //static bool useMeanShiftGrouping = false;


        public static List <PSM4TxSample> LoadSamples(string folder)
        {
            //Load all samples from all the folders
            List <PSM4TxSample> samples = new List <PSM4TxSample>(); List <string> missing_xml_samples = new List <string>();

            string[] files = Directory.EnumerateFiles(folder)
                             .Where(file => file.ToLower().EndsWith(".bmp") || file.ToLower().EndsWith(".jpg"))
                             .ToArray();

            for (int k = 0; k < files.Length; k++)
            {
                string img_file = files[k].ToLower();
                string xml_file = img_file.EndsWith("bmp") ? img_file.Replace(".bmp", "_data.xml") : img_file.Replace(".jpg", "_data.xml");

                if (!File.Exists(xml_file))
                {
                    missing_xml_samples.Add(img_file); continue;
                }

                PSM4TxSample sample = new PSM4TxSample(img_file);

                //  .// Means descendants, which includes children of children (and so forth).
                //  ./ Means direct children.
                //If a XPath starts with a / it becomes relative to the root of the document;
                //to make it relative to your own node start it with ./.
                HtmlAgilityPack.HtmlDocument       doc         = new HtmlAgilityPack.HtmlDocument(); doc.Load(xml_file);
                HtmlAgilityPack.HtmlNodeCollection shape_nodes = doc.DocumentNode.SelectNodes("//shape");
                foreach (HtmlAgilityPack.HtmlNode shape_node in shape_nodes)
                {
                    HtmlAgilityPack.HtmlNode blocktext_node = shape_node.SelectSingleNode(".//blocktext");
                    HtmlAgilityPack.HtmlNode text_node      = blocktext_node.SelectSingleNode("./text");
                    HtmlAgilityPack.HtmlNode data_node      = shape_node.SelectSingleNode(".//data");
                    HtmlAgilityPack.HtmlNode extent_node    = data_node.SelectSingleNode("./extent");

                    string s_x = extent_node.GetAttributeValue("X", "");
                    string s_y = extent_node.GetAttributeValue("Y", "");
                    string s_w = extent_node.GetAttributeValue("Width", "");
                    string s_h = extent_node.GetAttributeValue("Height", "");

                    if (text_node.InnerText.ToLower() == "isolator")
                    {
                        sample.SetIsolator(s_x, s_y, s_w, s_h); //(787.18896484375, 1370.0)
                    }
                    else if (text_node.InnerText.ToLower() == "arrayblock")
                    {
                        sample.SetArrayBlock(s_x, s_y, s_w, s_h); //(1052.86828613281, 1201.8359375)
                    }
                    else if (text_node.InnerText.ToLower() == "aperture")
                    {
                        sample.SetAperture(s_x, s_y, s_w, s_h); //(209.156982421875, 1885.03271484375)
                    }
                }

                samples.Add(sample);
            }

            using (StreamWriter sw = new StreamWriter("missing_xml.txt"))
            {
                for (int i = 0; i < missing_xml_samples.Count; i++)
                {
                    sw.WriteLine(missing_xml_samples[i]);
                }
            }

            return(samples);
        }
Exemple #33
0
        /// <summary>
        /// Fill an object and go through it's properties and fill them too.
        /// </summary>
        /// <param name="targetType">Type of object to want to fill. It should have atleast one property that defined XPath.</param>
        /// <param name="htmlDocument">If htmlDocument includes data , leave this parameter null. Else pass your specific htmldocument.</param>
        /// <returns>Returns an object of type targetType including Encapsulated data.</returns>
        public object GetEncapsulatedData(Type targetType, HtmlDocument htmlDocument = null)
        {
            #region SettingPrerequisite

            if (targetType == null)
            {
                throw new ArgumentNullException("Parameter targetType is null");
            }

            HtmlDocument source = null;

            if (htmlDocument == null)
            {
                source = OwnerDocument;
            }
            else
            {
                source = htmlDocument;
            }



            object targetObject;

            if (targetType.IsInstantiable() == false) // if it can not create instanse of T because of lack of constructor in type T.
            {
                throw new MissingMethodException("Parameterless Constructor excpected for " + targetType.FullName);
            }
            else
            {
                targetObject = Activator.CreateInstance(targetType);
            }

            #endregion SettingPrerequisite

            #region targetObject_Defined_XPath
            if (targetType.IsDefinedAttribute(typeof(HasXPathAttribute)) == true) // Object has xpath attribute (Defined HasXPath)
            {
                // Store list of properties that defined xpath attribute
                IEnumerable <PropertyInfo> validProperties = targetType.GetPropertiesDefinedXPath();
                if (validProperties.CountOfIEnumerable() == 0) // if no XPath property exist in type T while T defined HasXpath attribute.
                {
                    throw new MissingXPathException("Type " + targetType.FullName +
                                                    " defined HasXPath Attribute but it does not have any property with XPath Attribte.");
                }
                else
                {
                    // Fill targetObject variable Properties ( T targetObject )
                    foreach (PropertyInfo propertyInfo in validProperties)
                    {
                        // Get xpath attribute from valid properties
                        // for .Net old versions:
                        XPathAttribute xPathAttribute = (propertyInfo.GetCustomAttributes(typeof(XPathAttribute), false) as IList)[0] as XPathAttribute;


                        #region Property_IsNOT_IEnumerable
                        if (propertyInfo.IsIEnumerable() == false) // Property is None-IEnumerable
                        {
                            HtmlNode htmlNode = null;

                            // try to fill htmlNode based on XPath given
                            try
                            {
                                htmlNode = source.DocumentNode.SelectSingleNode(xPathAttribute.XPath);
                            }
                            catch // if it can not select node based on given xpath
                            {
                                throw new NodeNotFoundException("Cannot find node with giving XPath to bind to " + propertyInfo.PropertyType.FullName + " " + propertyInfo.Name);
                            }

                            if (htmlNode == null)
                            {
                                throw new NodeNotFoundException("Cannot find node with givig XPath to bind to " +
                                                                propertyInfo.PropertyType.FullName + " " + propertyInfo.Name);
                            }


                            #region Property_Is_HasXPath_UserDefinedClass
                            // Property is None-IEnumerable HasXPath-user-defined class
                            if (propertyInfo.PropertyType.IsDefinedAttribute(typeof(HasXPathAttribute)) == true)
                            {
                                HtmlDocument innerHtmlDocument = new HtmlDocument();

                                innerHtmlDocument.LoadHtml(htmlNode.InnerHtml);

                                object o = GetEncapsulatedData(propertyInfo.PropertyType, innerHtmlDocument);

                                propertyInfo.SetValue(targetObject, o, null);
                            }
                            #endregion Property_Is_HasXPath_UserDefinedClass

                            #region Property_Is_SimpleType
                            // Property is None-IEnumerable value-type or .Net class or user-defined class.
                            // AND does not deifned xpath and shouldn't have property that defined xpath.
                            else
                            {
                                string result = string.Empty;

                                if (xPathAttribute.AttributeName == null) // It target None-IEnumerable value of HTMLTag
                                {
                                    result = Tools.GetNodeValueBasedOnXPathReturnType <string>(htmlNode, xPathAttribute);
                                }
                                else // It target None-IEnumerable attribute of HTMLTag
                                {
                                    result = htmlNode.GetAttributeValue(xPathAttribute.AttributeName, null);
                                }

                                if (result == null)
                                {
                                    throw new NodeAttributeNotFoundException("Can not find " +
                                                                             xPathAttribute.AttributeName + " Attribute in " + htmlNode.Name +
                                                                             " related to " + propertyInfo.PropertyType.FullName + " " + propertyInfo.Name);
                                }


                                object resultCastedToTargetPropertyType;

                                try
                                {
                                    resultCastedToTargetPropertyType = Convert.ChangeType(result, propertyInfo.PropertyType);
                                }
                                catch (FormatException)
                                {
                                    throw new FormatException("Can not convert Invalid string to " + propertyInfo.PropertyType.FullName + " " + propertyInfo.Name);
                                }
                                catch (Exception ex)
                                {
                                    throw new Exception("Unhandled Exception : " + ex.Message);
                                }



                                propertyInfo.SetValue(targetObject, resultCastedToTargetPropertyType, null);
                            }
                            #endregion Property_Is_SimpleType
                        }
                        #endregion Property_IsNOT_IEnumerable


                        #region Property_Is_IEnumerable
                        else // Property is IEnumerable<T>
                        {
                            IList <Type> T_Types = propertyInfo.GetGenericTypes() as IList <Type>; // Get T type

                            if (T_Types == null || T_Types.Count == 0)
                            {
                                throw new ArgumentException(propertyInfo.Name + " should have one generic argument.");
                            }

                            else if (T_Types.Count > 1)
                            {
                                throw new ArgumentException(propertyInfo.Name + " should have one generic argument.");
                            }

                            else if (T_Types.Count == 1) // It is NOT something like Dictionary<Tkey , Tvalue>
                            {
                                HtmlNodeCollection nodeCollection;

                                // try to fill nodeCollection based on given xpath.
                                try
                                {
                                    nodeCollection = source.DocumentNode.SelectNodes(xPathAttribute.XPath);
                                }
                                catch
                                {
                                    throw new NodeNotFoundException("Cannot find node with givig XPath to bind to " + propertyInfo.PropertyType.FullName + " " + propertyInfo.Name);
                                }

                                if (nodeCollection == null || nodeCollection.Count == 0)
                                {
                                    throw new NodeNotFoundException("Cannot find node with givig XPath to bind to " + propertyInfo.PropertyType.FullName + " " + propertyInfo.Name);
                                }


                                IList result = T_Types[0].CreateIListOfType();

                                #region Property_Is_IEnumerable<HasXPath-UserDefinedClass>
                                if (T_Types[0].IsDefinedAttribute(typeof(HasXPathAttribute)) == true) // T is IEnumerable HasXPath-user-defined class (T type Defined XPath properties)
                                {
                                    foreach (HtmlNode node in nodeCollection)
                                    {
                                        HtmlDocument innerHtmlDocument = new HtmlDocument();
                                        innerHtmlDocument.LoadHtml(node.InnerHtml);

                                        object o = GetEncapsulatedData(T_Types[0], innerHtmlDocument);

                                        result.Add(o);
                                    }
                                }
                                #endregion Property_Is_IEnumerable<HasXPath-UserDefinedClass>

                                #region Property_Is_IEnumerable<SimpleClass>
                                else // T is value-type or .Net class or user-defined class ( without xpath )
                                {
                                    if (xPathAttribute.AttributeName == null) // It target value
                                    {
                                        try
                                        {
                                            result = Tools.GetNodesValuesBasedOnXPathReturnType(nodeCollection, xPathAttribute, T_Types[0]);
                                        }
                                        catch (FormatException)
                                        {
                                            throw new FormatException("Can not convert Invalid string in node collection to " + T_Types[0].FullName + " " + propertyInfo.Name);
                                        }
                                        catch (Exception ex)
                                        {
                                            throw new Exception("Unhandled Exception : " + ex.Message);
                                        }
                                    }
                                    else // It target attribute
                                    {
                                        foreach (HtmlNode node in nodeCollection)
                                        {
                                            string nodeAttributeValue = node.GetAttributeValue(xPathAttribute.AttributeName, null);
                                            if (nodeAttributeValue == null)
                                            {
                                                throw new NodeAttributeNotFoundException("Can not find " + xPathAttribute.AttributeName + " Attribute in " + node.Name + " related to " +
                                                                                         propertyInfo.PropertyType.FullName + " " + propertyInfo.Name);
                                            }

                                            object resultCastedToTargetPropertyType;


                                            try
                                            {
                                                resultCastedToTargetPropertyType = Convert.ChangeType(nodeAttributeValue, T_Types[0]);
                                            }
                                            catch (FormatException) // if it can not cast result(string) to type of property.
                                            {
                                                throw new FormatException("Can not convert Invalid string to " + T_Types[0].FullName + " " + propertyInfo.Name);
                                            }
                                            catch (Exception ex)
                                            {
                                                throw new Exception("Unhandled Exception : " + ex.Message);
                                            }


                                            result.Add(resultCastedToTargetPropertyType);
                                        }
                                    }
                                }
                                #endregion Property_Is_IEnumerable<SimpleClass>

                                if (result == null || result.Count == 0)
                                {
                                    throw new Exception("Cannot fill " + propertyInfo.PropertyType.FullName + " " + propertyInfo.Name + " because it is null.");
                                }

                                propertyInfo.SetValue(targetObject, result, null);
                            }
                        }
                        #endregion Property_IsNOT_IEnumerable
                    }

                    return(targetObject);
                }
            }
            #endregion targetObject_Defined_XPath

            #region targetObject_NOTDefined_XPath
            else // Object doesen't have xpath attribute
            {
                throw new MissingXPathException("Type T must define HasXPath attribute and include properties with XPath attribute.");
            }
            #endregion targetObject_NOTDefined_XPath
        }
Exemple #34
0
        /*private void downloadGamefrontMap(string mapFolder, Map m, string downloadUrl)
         * {
         *  // Download mod listing page
         *  string tempMainPagePath = Path.Combine(TempDir, mapFolder + "GamefrontMainPage.html");
         *  client = new MapInstallClient(m);
         *  client.DownloadFile(downloadUrl, tempMainPagePath);
         *
         *  // TODO: Parse correct page element for download link
         *  HtmlAgilityPack.HtmlDocument gamefrontMainPage = new HtmlAgilityPack.HtmlDocument();
         *  gamefrontMainPage.LoadHtml(File.ReadAllText(tempMainPagePath));
         *  HtmlAgilityPack.HtmlNode downloadButton = gamefrontMainPage.GetElementbyId("downloadmirrorstoggle");
         *  string downloadPageUrl = Url.Combine(moddbBaseUrl, downloadButton.GetAttributeValue("href", ""));
         * }*/

        private void DownloadModdbMap(string mapFolder, Map m, string downloadUrl)
        {
            // Download mod listing page
            string tempMainPagePath = Path.Combine(TempDir, mapFolder + "ModdbMainPage.html");

            client = new MapInstallClient(m);
            client.DownloadFile(downloadUrl, tempMainPagePath);

            // Scan for download button and retrieve link
            HtmlAgilityPack.HtmlDocument moddbMainPage = new HtmlAgilityPack.HtmlDocument();
            moddbMainPage.LoadHtml(File.ReadAllText(tempMainPagePath));
            HtmlAgilityPack.HtmlNode downloadButton = moddbMainPage.GetElementbyId("downloadmirrorstoggle");
            string downloadPageUrl = Url.Combine(ModdbBaseUrl, downloadButton.GetAttributeValue("href", ""));

            // Download download page
            string tempDownloadPagePath = Path.Combine(TempDir, mapFolder + "DownloadPage.html");

            client.DownloadFile(downloadPageUrl, tempDownloadPagePath);

            // Scan for a tags in download page
            HtmlAgilityPack.HtmlDocument moddbDownloadPage = new HtmlAgilityPack.HtmlDocument();
            moddbDownloadPage.LoadHtml(File.ReadAllText(tempDownloadPagePath));
            IEnumerable <HtmlAgilityPack.HtmlNode> anchors = moddbDownloadPage.DocumentNode.Descendants("a");

            if (anchors != null)
            {
                // Regex matches text displayed on page for correct download link
                Regex downloadFile = new Regex(@"download (.*)\.(.*)");

                foreach (HtmlNode a in anchors)
                {
                    Match match = downloadFile.Match(a.InnerText);

                    if (match.Success)
                    {
                        string filename      = match.Groups[1].ToString();
                        string fileExtension = match.Groups[2].ToString();
                        string destFile      = Path.Combine(TempDir, filename + "." + fileExtension);

                        string realDownloadUrl = Url.Combine(ModdbBaseUrl, a.GetAttributeValue("href", ""));

                        client.DownloadFileCompleted   += client_DownloadFileCompleted;
                        client.DownloadProgressChanged += client_DownloadProgressChanged;
                        //MessageBox.Show("File will start downloading.", "Downloading " + m.Name);
                        client.DownloadFileAsync(new Uri(realDownloadUrl), destFile);
                        client.downloadedFile = destFile;

                        // Show progress bar
                        progBarMapDownload.Visible = true;
                        // Show map name
                        lblMapInstalling.Visible = true;
                        lblMapInstalling.Text    = m.Name;
                        lblInstallStatus.Visible = true;
                        lblInstallStatus.Text    = "Downloading map...";

                        // Exit this now as we have found and processed our match
                        // Any other matches in the HTML are irrelevant
                        break;
                    }
                }
            }
        }
Exemple #35
0
        void ExtractUsers(string documentText)
        {
            try
            {
                HtmlAgilityPack.HtmlDocument htmlDocument = new HtmlAgilityPack.HtmlDocument();
                htmlDocument.LoadHtml(documentText);

                HtmlAgilityPack.HtmlNode bloodDonor = htmlDocument.DocumentNode.SelectSingleNode("//*[@id='regmain']");

                HtmlAgilityPack.HtmlNode linkPage = htmlDocument.DocumentNode.SelectSingleNode("//*[@id='regPage']/div/div/div/a[4]");

                //linkPageCount = linkPage.InnerLength;

                HtmlAgilityPack.HtmlNode userTable = htmlDocument.DocumentNode.SelectSingleNode("//*[@id='regPage']/div/table");

                HtmlAgilityPack.HtmlNodeCollection userTableCount = userTable.SelectNodes("./tr");

                for (int k = 2; k <= userTableCount.Count(); k++)
                {
                    HtmlAgilityPack.HtmlNode moreBtn = userTable.SelectSingleNode("./tr[" + k + "]/td[6]/a");

                    string   linkBtn  = moreBtn.GetAttributeValue("onclick", null);
                    string[] mainLink = linkBtn.Split('b');
                    string   moreLink = mainLink[1];
                    using (WebClient client = new WebClient())
                    {
                        var link = client.DownloadString("http://bloodhelpers.com/b" + moreLink);
                        HtmlAgilityPack.HtmlDocument userDocument = new HtmlAgilityPack.HtmlDocument();
                        userDocument.LoadHtml(link);

                        HtmlAgilityPack.HtmlNode selectTable = userDocument.DocumentNode.SelectSingleNode("//*[@id='search']/form/table");

                        //User Name
                        HtmlAgilityPack.HtmlNode userName = selectTable.SelectSingleNode("./tr[1]/td[2]");
                        string Name = userName.InnerText;

                        //User Email
                        HtmlAgilityPack.HtmlNode userEmail = selectTable.SelectSingleNode("./tr[2]/td[2]");
                        string[] Mail    = userEmail.InnerHtml.Split('=');
                        string   addMail = Mail[1] + "=" + Mail[2];
                        string   Email   = addMail.Replace("border", "");
                        //fuction to convert png image into jpg


                        //User BloodGroup
                        HtmlAgilityPack.HtmlNode userBloodGroup = selectTable.SelectSingleNode("./tr[3]/td[2]");
                        string BloodGroup = userBloodGroup.InnerText;

                        //User Gender
                        HtmlAgilityPack.HtmlNode userGender = selectTable.SelectSingleNode("./tr[4]/td[2]");
                        string Gender = userGender.InnerText;

                        //User Age
                        HtmlAgilityPack.HtmlNode userAge = selectTable.SelectSingleNode("./tr[5]/td[2]");
                        int Age = Int32.Parse(userAge.InnerText.Replace("Years", ""));

                        //User City
                        HtmlAgilityPack.HtmlNode userCity = selectTable.SelectSingleNode("./tr[6]/td[2]");
                        string City = userCity.InnerText;

                        //User Mobile Number
                        HtmlAgilityPack.HtmlNode userMobile = selectTable.SelectSingleNode("./tr[7]/td[2]");
                        string[] num          = userMobile.InnerHtml.Split('=');
                        string   addNum       = num[1] + "=" + num[2];
                        string   mobileNumber = addNum.Replace("border", "");
                        //function to convert png image into jpg

                        //User Land Line Number
                        HtmlAgilityPack.HtmlNode userLandLine = selectTable.SelectSingleNode("./tr[8]/td[2]");
                        string[] landNum     = userLandLine.InnerHtml.Split('=');
                        string   addLandNum  = landNum[1] + "=" + landNum[2];
                        string   landLineNum = addLandNum.Replace("border", "");
                        //Function to convert png image into jpg

                        //User Last Donation Date
                        HtmlAgilityPack.HtmlNode userLastDonationDate = selectTable.SelectSingleNode("./tr[9]/td[2]");
                        string LastDonationDate = userLastDonationDate.InnerText;


                        //Store Data in DataBase
                        StoreUserData(Name, Email, BloodGroup, Gender, Age, City, mobileNumber, landLineNum, LastDonationDate);
                    }
                }
            }
            catch
            {
            }
        }
Exemple #36
0
            public ParsedLink(HtmlAgilityPack.HtmlNode node)
            {
                Url.Add(node.GetAttributeValue("href", ""));
                InnerText = node.InnerText;

                DeviantArt = Url.Contains("deviantart");
                Uri uriResult;

                bool validLinkResult = Uri.TryCreate(Url[0], UriKind.Absolute, out uriResult) &&
                                       (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);

                if (validLinkResult)
                {
                    JValid = uriResult.Host.Contains("deviantart");
                }
                else
                {
                    JValid = false;
                }

                Valid = (JValid && InnerText.Contains("ource")) || InnerText.Contains("ource") || JValid;

                Match match = Regex.Match(InnerText, @"(\d+)");

                if (!int.TryParse(match.Groups[1].Value, out Source))
                {
                    Source = -1;
                }

                if (Valid && !JValid && !DeviantArt)
                {
                    var parent = node.ParentNode;

                    var sibling = parent.NextSibling;
                    while (sibling != null)
                    {
                        if (sibling.Name == "a")
                        {
                            break;
                        }

                        // Check to see if we've moved onto another source's link
                        if (sibling.Name == "b")
                        {
                            var links = sibling.Descendants("a");

                            if (links.Any(l => l.InnerHtml.Contains("ource")))
                            {
                                break;
                            }
                        }

                        if (sibling.Name == "div")
                        {
                            var links = sibling.Descendants("a");

                            var possibleImageLinks = links.FirstOrDefault(l => new [] { "jpg", "jpeg", "png", "gif" }.Any(e => l.GetAttributeValue("href", "").ToLower().Contains(e)));

                            if (possibleImageLinks != null)
                            {
                                if (!AlternativeProposed)
                                {
                                    OriginalUrl = Url[0];
                                    Url.Clear();
                                }
                                Url.Add(possibleImageLinks.GetAttributeValue("href", ""));
                                AlternativeProposed = true;
                                JValid = true;
                            }
                        }

                        sibling = sibling.NextSibling;
                    }
                }
            }
        /// <summary>
        /// Fill an object and go through it's properties and fill them too.
        /// </summary>
        /// <typeparam name="T">Type of object to want to fill. It should have atleast one property that defined XPath.</typeparam>
        /// <param name="htmlDocument">If htmlDocument includes data , leave this parameter null. Else pass your specific htmldocument.</param>
        /// <returns>Returns an object of type T including Encapsulated data.</returns>
        public T GetEncapsulatedData <T>(HtmlDocument htmlDocument = null)
        {
            HtmlDocument source = null;

            if (htmlDocument == null)
            {
                source = OwnerDocument;
            }
            else
            {
                source = htmlDocument;
            }

            T targetObject = Activator.CreateInstance <T>();

            #region targetObject_Defined_XPath
            if (Tools.IsDefinedAttr(typeof(T), (typeof(HasXPathAttribute))) == true) // Object has xpath attribute (Defined HasXPath)
            {
                // Store list of properties that defined xpath attribute
                IEnumerable <PropertyInfo> validProperties = Tools.GetPropertiesDefinedXPath(typeof(T));

                foreach (PropertyInfo propertyInfo in validProperties)
                {
                    XPathAttribute xPathAttribute = (propertyInfo.GetCustomAttributes(typeof(XPathAttribute), false) as IList)[0] as XPathAttribute; // Get xpath attribute from valid properties

                    #region Property_IsNOT_IEnumerable
                    if (Tools.IsIEnumerable(propertyInfo) == false) // Property is None-IEnumerable
                    {
                        HtmlNode htmlNode = source.DocumentNode.SelectSingleNode(xPathAttribute.XPath);

                        #region Property_Is_HasXPath_UserDefinedClass
                        if (Tools.IsDefinedAttr(propertyInfo.PropertyType, (typeof(HasXPathAttribute))) == true) // Property is None-IEnumerable HasXPath-user-defined class
                        {
                            HtmlDocument innerHtmlDocument = new HtmlDocument();
                            innerHtmlDocument.LoadHtml(htmlNode.InnerHtml);

                            MethodInfo getEncapsulatedData = Tools.GetMethodByItsName(typeof(HtmlNode), "GetEncapsulatedData").MakeGenericMethod(propertyInfo.PropertyType);
                            object     o = getEncapsulatedData.Invoke(innerHtmlDocument.DocumentNode, new object[] { innerHtmlDocument });

                            propertyInfo.SetValue(targetObject, o, null);
                        }
                        #endregion Property_Is_HasXPath_UserDefinedClass

                        #region Property_Is_SimpleType
                        // Property is None-IEnumerable value-type or .Net class or user-defined class (does not deifned xpath and shouldn't have property that defined xpath )
                        else
                        {
                            string result = string.Empty;

                            if (xPathAttribute.AttributeName == null) // It target None-IEnumerable value of HTMLTag
                            {
                                result = Tools.GetNodeValueBasedOnXPathReturnType <string>(htmlNode, xPathAttribute);
                            }
                            else // It target None-IEnumerable attribute of HTMLTag
                            {
                                result = htmlNode.GetAttributeValue(xPathAttribute.AttributeName, "Html Tag Attribute Not Specified");
                            }

                            propertyInfo.SetValue(targetObject, Convert.ChangeType(result, propertyInfo.PropertyType), null);
                        }
                        #endregion Property_Is_SimpleType
                    }
                    #endregion Property_IsNOT_IEnumerable

                    #region Property_Is_IEnumerable
                    else // Property is IEnumerable<T>
                    {
                        IList <Type> T_Types = Tools.GetGenericTypes(propertyInfo) as IList <Type>; // Get T type

                        if (T_Types == null || T_Types.Count == 0)
                        {
                            throw new NotImplementedException();
                        }

                        else if (T_Types.Count > 1)
                        {
                            throw new NotImplementedException();
                        }

                        else if (T_Types.Count == 1) // It is NOT something like Dictionary<Tkey , Tvalue>
                        {
                            HtmlNodeCollection nodeCollection = source.DocumentNode.SelectNodes(xPathAttribute.XPath);

                            IList result = Tools.CreateIListOfType(T_Types[0]);

                            #region Property_Is_IEnumerable<HasXPath-UserDefinedClass>
                            if (Tools.IsDefinedAttr(T_Types[0], typeof(HasXPathAttribute)) == true) // T is IEnumerable HasXPath-user-defined class (T type Defined XPath properties)
                            {
                                foreach (HtmlNode node in nodeCollection)
                                {
                                    HtmlDocument innerHtmlDocument = new HtmlDocument();
                                    innerHtmlDocument.LoadHtml(node.InnerHtml);

                                    MethodInfo getEncapsulatedData = Tools.GetMethodByItsName(typeof(HtmlNode), "GetEncapsulatedData").MakeGenericMethod(T_Types[0]);
                                    object     o = getEncapsulatedData.Invoke(innerHtmlDocument.DocumentNode, new object[] { innerHtmlDocument });

                                    result.Add(o);
                                }
                            }
                            #endregion Property_Is_IEnumerable<HasXPath-UserDefinedClass>

                            #region Property_Is_IEnumerable<SimpleClass>
                            else // T is value-type or .Net class or user-defined class ( without xpath )
                            {
                                if (xPathAttribute.AttributeName == null) // It target value
                                {
                                    result = Tools.GetNodesValuesBasedOnXPathReturnType(nodeCollection, xPathAttribute, T_Types[0]);
                                }
                                else // It target attribute
                                {
                                    foreach (HtmlNode node in nodeCollection)
                                    {
                                        result.Add(Convert.ChangeType(node.GetAttributeValue(xPathAttribute.AttributeName, "Html Tag Attribute Not Specified"), T_Types[0]));
                                    }
                                }
                            }
                            #endregion Property_Is_IEnumerable<SimpleClass>

                            propertyInfo.SetValue(targetObject, result, null);
                        }
                    }
                    #endregion Property_IsNOT_IEnumerable
                }

                return(targetObject);
            }
            #endregion targetObject_Defined_XPath

            #region targetObject_NOTDefined_XPath
            else // Object doesen't have xpath attribute
            {
                throw new NotImplementedException();
            }
            #endregion targetObject_NOTDefined_XPath
        }