C# HTML解析工具HtmlAgilityPack使用实例

HTML解析器从字符串加载 HtmlHtmlDocument.LoadHtml 方法从指定字符串加载 HTML 文档。例子 以下示例从指定字符串加载 Html。var html = @"<!DOCTYPE html>
<html>
<body>
<h1>This is <b>bold</b> heading</h1>
<p>This is <u>underlined</u> paragraph</p>
<h2>This is <i>italic</i> heading</h2>
</body>
</html> ";

var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);

var htmlBody = htmlDoc.DocumentNode.SelectSingleNode("//body");

Console.WriteLine(htmlBody.OuterHtml);从 Web 加载 HtmlHtmlWeb.Load 方法从 Internet 资源获取 HTML 文档。例子 以下示例从 Web 加载 Html。var html = @"https://html-agility-pack.net/";

HtmlWeb web = new HtmlWeb();

var htmlDoc = web.Load(html);

var node = htmlDoc.DocumentNode.SelectSingleNode("//head/title");

Console.WriteLine("Node Name: " + node.Name + "\n" + node.OuterHtml);从文件加载 HtmlHtmlDocument.Load 方法从文件加载 HTML 文档。例子 以下示例从文件加载 Html。// Description: HAP – Load (From File)
// Website: https://html-agility-pack.net/
// Run: https://dotnetfiddle.net/EsvZyg

// @nuget: HtmlAgilityPack

using System;
using System.Xml;
using HtmlAgilityPack;

public class Program
{
public static void Main()
{
SaveHtmlFile();

#region example

var path = @"test.html";

var doc = new HtmlDocument();
doc.Load(path);

var node = doc.DocumentNode.SelectSingleNode("//body");

Console.WriteLine(node.OuterHtml);

#endregion
}

private static void SaveHtmlFile()
{
var html =@"<!DOCTYPE html>
<html>
<body>
<h1>This is <b>bold</b> heading</h1>
<p>This is <u>underlined</u> paragraph</p>
<h2>This is <i>italic</i> heading</h2>
</body>
</html> ";

var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);

htmlDoc.Save("test.html");
}
}HTML选择器方法名称描述SelectNodes()选择与 XPath 表达式匹配的节点列表。SelectSingleNode(String)选择与 XPath 表达式匹配的第一个 XmlNode。选择节点方法选择与 HtmlAgilityPack.HtmlNode.XPath 表达式匹配的节点列表。参数: xpath:XPath 表达式。返回: 包含与 HtmlAgilityPack.HtmlNode.XPath 查询匹配的节点集合的 HtmlAgilityPack.HtmlNodeCollection,如果没有节点与 XPath 表达式匹配,则返回 null。例子 以下示例使用 SelectNodes 方法选择与 XPath 表达式匹配的第一个节点。var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);

string name = htmlDoc.DocumentNode
.SelectNodes("//td/input")
.First()
.Attributes["value"].Value;以下示例选择与 XPath 表达式匹配的所有节点。var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);

var htmlNodes = htmlDoc.DocumentNode.SelectNodes("//td/input");选择单节点方法选择与 HtmlAgilityPack.HtmlNode.XPath 表达式匹配的第一个 HtmlNode。参数: xpath:XPath 表达式。可能不为空。返回: 与 XPath 查询匹配的第一个 HtmlAgilityPack.HtmlNode,如果未找到匹配节点,则为空引用。例子 以下示例使用 SelectNodes 方法选择与 XPath 表达式匹配的第一个节点。var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);

string name = htmlDoc.DocumentNode
.SelectSingleNode("//td/input")
.Attributes["value"].Value;HTML操作操作允许您操作 HTML 文档。 属性名称描述InnerHtml获取或设置对象的开始标签和结束标签之间的 HTML。InnerText获取对象的开始标签和结束标签之间的文本。OuterHtml获取 HTML 格式的对象及其内容。ParentNode获取此节点的父节点(对于可以有父节点的节点)。方法名称描述AppendChild()将指定节点添加到该节点的子节点列表的末尾。AppendChildren()将指定节点添加到该节点的子节点列表的末尾。Clone()创建节点的副本。CloneNode(Boolean)创建节点的副本。CloneNode(String)创建节点的副本并同时更改其名称。CloneNode(String, Boolean)创建节点的副本并同时更改其名称。CopyFrom(HtmlNode)创建节点及其下子树的副本。CopyFrom(HtmlNode, Boolean)创建节点的副本。CreateNode()从表示文本 HTML 的字符串创建 HTML 节点。InsertAfter()将指定的节点插入到指定的引用节点之后。InsertBefore将指定的节点插入到指定的引用节点之前。PrependChild将指定节点添加到该节点的子节点列表的开头。PrependChildren将指定的节点列表添加到该节点的子节点列表的开头。Remove从父集合中删除节点。RemoveAll删除当前节点的所有子节点和/或属性。RemoveAllChildren删除当前节点的所有子节点。RemoveChild(HtmlNode)删除指定的子节点。RemoveChild(HtmlNode, Boolean)删除指定的子节点。ReplaceChild()将子节点 oldChild 替换为 newChild 节点。内部HTML(InnerHtml)public virtual string InnerHtml { get; set; } 获取或设置对象的开始标签和结束标签之间的 HTML。InnerHtml 是HtmlAgilityPack.HtmlNode的成员。例子var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);

var htmlNodes = htmlDoc.DocumentNode.SelectNodes("//body/h1");

foreach (var node in htmlNodes)
{
Console.WriteLine(node.InnerHtml);
}内部TEXT(InnerText)public virtual string InnerText { get; } 获取对象的开始标签和结束标签之间的文本。InnerText 是HtmlAgilityPack.HtmlNode的成员。例子var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);

var htmlNodes = htmlDoc.DocumentNode.SelectNodes("//body/h1");

foreach (var node in htmlNodes)
{
Console.WriteLine(node.InnerText);
}外部HTML(OuterHtml)public virtual string OuterHtml { get; } 获取 HTML 格式的对象及其内容。OuterHtml 是HtmlAgilityPack.HtmlNode的成员。例子var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);

var htmlNodes = htmlDoc.DocumentNode.SelectNodes("//body/h1");

foreach (var node in htmlNodes)
{
Console.WriteLine(node.OuterHtml);
}父节点(ParentNode)public HtmlNode ParentNode { get; } 获取此节点的父节点(对于可以有父节点的节点)。ParentNode 是HtmlAgilityPack.HtmlNode的成员。例子var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);

var node = htmlDoc.DocumentNode.SelectSingleNode("//body/h1");

HtmlNode parentNode = node.ParentNode;

Console.WriteLine(parentNode.Name);方法的更多示例,点此查看–>HTML操作HTML遍历遍历允许您遍历 HTML 节点。属性名称描述ChildNodes获取该节点的所有子节点。FirstChild获取节点的第一个子节点。LastChild获取节点的最后一个子节点。NextSibling获取紧随该元素之后的 HTML 节点。ParentNode获取此节点的父节点(对于可以有父节点的节点)。方法名称描述Ancestors()获取节点的所有祖先。Ancestors(String)获取具有匹配名称的祖先。AncestorsAndSelf()获取所有祖先节点和当前节点。AncestorsAndSelf(String)获取名称匹配的所有祖先节点和当前节点。DescendantNodes获取该节点和每个子节点的所有后代节点。DescendantNodesAndSelf按文档顺序返回此元素的所有后代节点的集合。Descendants()获取枚举列表中的所有后代节点。Descendants(String)获取具有匹配名称的所有后代节点。DescendantsAndSelf()按文档顺序返回此元素的所有后代节点的集合。DescendantsAndSelf(String)获取包含该节点的所有后代节点。Element获取第一代子节点匹配名称。Elements获取匹配name的第一代子节点。属性、方法的更多示例,点此查看–>HTML遍历HTML编写器保存 HtmlDocument 并写入 HtmlNodeHtmlDocument – 方法名称描述Save(Stream)将 HTML 文档保存到指定的流。Save(StreamWriter)将 HTML 文档保存到指定的 StreamWriter。Save(TextWriter)将 HTML 文档保存到指定的 TextWriter。Save(String)将混合文档保存到指定文件。Save(XmlWriter)将 HTML 文档保存到指定的 XmlWriter。Save(Stream, Encoding)将 HTML 文档保存到指定的流。Save(String, Encoding)将混合文档保存到指定文件。HtmlNode – 方法名称描述WriteContentTo()将节点的所有子节点保存到字符串中。WriteContentTo(TextWriter)将节点的所有子节点保存到指定的 TextWriter。WriteTo()将当前节点保存到字符串中。WriteTo(TextWriter)将当前节点保存到指定的 TextWriter。WriteTo(XmlWriter)将当前节点保存到指定的 XmlWriter。方法的更多示例,点此查看–>HTML编写器HTML实用程序Html文档实用程序Html文档方法名称描述DetectEncoding(Stream)检测 HTML 流的编码。DetectEncoding(TextReader)检测 TextReader 上提供的 HTML 文本的编码。DetectEncoding(String)检测 HTML 文件的编码。DetectEncodingAndLoad(String)首先从文件中检测 HTML 文档的编码,然后加载该文件。DetectEncodingAndLoad(String, Boolean)首先从文件中检测 HTML 文档的编码,然后加载该文件。方法的更多示例,点此查看–>HTML实用程序


本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://www.xiaosb.com/beian/53406/