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(); }