HtmlAgilityPack的简单使用

HtmlAgilityPack可以对Html进行解析,获取某个标签的属性的值、InnerText、InnerHtml等,还可以去除js代码,css样式和注释。

using HtmlAgilityPack;
 
HtmlDocument htmlDocContent = new HtmlDocument();
htmlDocContent.LoadHtml(strHtmlContent);
htmlDocContent.DocumentNode为这段Html的根标签,它的ChildNodes属性为其子标签。
比如,要获取这段Html中所有的img的src属性的值,和每个标签的InnerText,可以通过递归获取
StringBuilder sbContent = new StringBuilder();
            if (node.ChildNodes.Count < 1)
            {
                if (node.InnerText.IsNotNullOrEmpty())
                {
                    sbContent.AppendLine(string.Concat("<txt>", node.InnerText, "</txt>"));
                }
                if (string.Equals(node.Name, "img", StringComparison.InvariantCultureIgnoreCase) && node.Attributes.Contains("src"))
                {
                    sbContent.AppendLine(string.Concat("<img>", FormatHtml.GetFullImageUrl(node.Attributes["src"].Value, siteUrl), "</img>"));
                }
                return sbContent.ToString();
            }
            foreach (HtmlNode childNode in node.ChildNodes)
            {
                sbContent.Append(FormatHtml.GetContent(childNode, siteUrl));
            }
            return sbContent.ToString();

如果这段html中只有一个标签或者有多个同级标签,那么HtmlAgilityPack会自动生成一个根标签。

HtmlAgilityPack还可以处理js代码,css样式和注释

foreach (HtmlNode nodeScripte in node.Descendants("script").ToList())
            {
                nodeScripte.Remove();
            }
            foreach (HtmlNode nodeStyle in node.Descendants("style").ToList())
            {
                nodeStyle.Remove();
            }
            foreach (HtmlNode nodeComment in node.Descendants("//comment()").ToList())
            {
                nodeComment.Remove();
            }

 

posted @ 2013-03-27 18:21  DCLancer  阅读(1514)  评论(0编辑  收藏  举报
(function() { var c = document.createElement('script'); c.type = 'text/javascript'; c.async = true; c.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'www.clicki.cn/boot/48212'; var h = document.getElementsByTagName('script')[0]; h.parentNode.insertBefore(c, h); })();