
对于许多开发任务(从网页抓取、数据提取到内容自动化)而言,高效解析 HTML 是一项常见需求。虽然 .NET 生态中提供了 HtmlAgilityPack 等工具,但 Spire.Doc 凭借直观的对象模型和良好的集成能力,使得在 C# 中解析 HTML 变得更加简单高效。
本指南将介绍如何使用 Spire.Doc for .NET 来解析 HTML,包括从不同来源加载 HTML、遍历文档结构以及提取关键信息。
配置 Spire.Doc
将 C# HTML 解析库集成到项目中,最简单的方式是通过 NuGet:
- 在 Visual Studio 中打开你的项目。
- 在解决方案资源管理器中右键项目 → 选择管理 NuGet 程序包。
- 在 NuGet 包管理器中搜索 Spire.Doc。
- 选择最新稳定版本并点击安装。
或者,你也可以从 E-iceblue 官网直接下载库,解压 ZIP 文件,并在项目中引用 Spire.Doc.dll。
Spire.Doc 如何解析 HTML
Spire.Doc 会将 HTML 转换为结构化的对象模型,其中 <p>、<a>、<table> 等元素都会映射为可通过代码访问的类。主要组件包括:
- Document:解析后 HTML 内容的容器。
- Section:表示内容块(类似 HTML 中的
<body>或<div>)。 - Paragraph:对应 HTML 块级元素,如
<p>、<h1>、<li>。 - DocumentObject:段落中所有元素的基类(如图片、链接等)。
这种模型能够很好地保留 HTML 结构,并通过直观的 C# 属性和方法进行访问。
如何加载并解析 HTML 内容
Spire.Doc 支持从字符串、本地文件以及远程 URL(结合 HTTP 客户端)加载并解析 HTML。以下是针对每种场景的详细示例。
解析 HTML 字符串
将 HTML 字符串(例如来自 Web API 或数据库)解析为 Spire.Doc 的对象模型:
using Spire.Doc;
using Spire.Doc.Documents;
namespace ParseHtmlString
{
class Program
{
static void Main(string[] args)
{
// 创建 Document 对象
Document doc = new Document();
// 添加节作为容器
Section section = doc.AddSection();
// 添加段落
Paragraph para = section.AddParagraph();
// 定义要解析的 HTML 内容
string htmlContent = @"
<h2>示例 HTML 字符串</h2>
<p>这是一个包含<strong>粗体文本</strong>和一个<a href='https://www.e-iceblue.com/'>链接</a>的段落。</p>
<ul>
<li>列表项 1</li>
<li>列表项 2</li>
</ul>
";
// 将 HTML 字符串解析到段落中
para.AppendHTML(htmlContent);
// 打印所有段落文本
Console.WriteLine("已解析的 HTML 内容:");
Console.WriteLine("---------------------");
foreach (Paragraph paragraph in section.Paragraphs)
{
Console.WriteLine(paragraph.Text);
}
}
}
}
在这个示例中,AppendHTML() 方法会自动将 HTML 标签转换为对应的 Spire.Doc 对象(例如 <h1> → 标题样式,<ul> → 列表段落)。
输出:

专业提示:您也可以调用 SaveToFile() 方法在 C# 中将 HTML 字符串转换为 Word 文档。
解析 HTML 文件
对于存储在文件中的 HTML 内容(例如下载的网页、静态 HTML 报告),可以使用 LoadFromFile() 加载并分析其结构:
using Spire.Doc;
using Spire.Doc.Documents;
namespace ParseHtmlFile
{
class Program
{
static void Main(string[] args)
{
// 创建 Document 对象
Document doc = new Document();
// 加载 HTML 文件
doc.LoadFromFile("sample.html", FileFormat.Html);
// 遍历节(HTML body 块)
foreach (Section section in doc.Sections)
{
Console.WriteLine($"第 {doc.Sections.IndexOf(section) + 1} 节:");
Console.WriteLine("---------------------------------");
// 遍历节中的段落
foreach (Paragraph para in section.Paragraphs)
{
// 打印段落文本和样式(例如标题级别)
string styleName = para.StyleName;
Console.WriteLine($"[{styleName}] {para.Text}"+ "\n");
}
Console.WriteLine();
}
}
}
}
此 C# 代码示例加载一个本地 HTML 文件,然后使用 Paragraph.StyleName 和 Paragraph.Text 属性提取内容及其样式信息。
输出:

Spire.Doc 的对象模型允许您像操作 Word 文档一样与 HTML 文件交互。除了提取文本,还可以从 HTML 中提取链接、表格等元素。
解析网页 URL
要解析网页 HTML,可以结合 HttpClient 先获取 HTML,再用 Spire.Doc 解析:
using Spire.Doc;
using Spire.Doc.Documents;
namespace HtmlUrlParsing
{
class Program
{
// 用于 Web 请求的 HttpClient 实例
private static readonly HttpClient httpClient = new HttpClient();
static async Task Main(string[] args)
{
try
{
// 从 URL 获取 HTML
string url = "https://www.e-iceblue.com/privacypolicy.html";
Console.WriteLine($"正在从以下地址获取 HTML: {url}");
string htmlContent = await FetchHtmlFromUrl(url);
// 解析获取到的 HTML
Document doc = new Document();
Section section = doc.AddSection();
Paragraph paragraph = section.AddParagraph();
paragraph.AppendHTML(htmlContent);
// 提取关键信息
Console.WriteLine("\n已解析内容摘要:");
Console.WriteLine($"节数: {doc.Sections.Count}");
Console.WriteLine($"段落数: {section.Paragraphs.Count}");
Console.WriteLine("-------------------------------------------");
// 提取所有标题段落
foreach (Paragraph para in section.Paragraphs)
{
if (para.StyleName.StartsWith("Heading"))
{
string headings = para.Text;
Console.WriteLine($"标题: {headings}");
}
}
}
catch (Exception ex)
{
Console.WriteLine($"错误: {ex.Message}");
}
}
// 从 URL 获取 HTML 的辅助方法
private static async Task<string> FetchHtmlFromUrl(string url)
{
// 设置 user-agent 以避免被服务器阻止
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
// 发送 GET 请求并返回 HTML 内容
HttpResponseMessage response = await httpClient.GetAsync(url);
response.EnsureSuccessStatusCode(); // 在发生 HTTP 错误时抛出异常 (4xx, 5xx)
return await response.Content.ReadAsStringAsync();
}
}
}
这个示例将网页抓取(获取 HTML)与文档解析结合起来,可以提取结构化信息(例如标题),非常适用于内容分析或数据抓取场景。
输出:

总结
Spire.Doc for .NET 为在 C# 应用中解析 HTML 提供了一套完整解决方案。无论是 HTML 字符串、本地文件还是网页 URL,都可以通过统一的 API 进行处理。通过遵循本指南中概述的示例,您可以高效地将 HTML 解析功能集成到您的 .NET 项目中。
要完整体验 Spire.Doc for .NET 的功能,请在此处申请 30 天免费试用许可证。
常见问题
问题1:为什么选择 Spire.Doc 而不是 HtmlAgilityPack 进行 HTML 解析?
答:Spire.Doc 和 HtmlAgilityPack 的主要目标不同,因此选择取决于您的需求:
HtmlAgilityPack:轻量级 HTML 解析库,适合处理原始 HTML(如提取标签、修复不规范 HTML),但不支持文档格式或导出 Word。
Spire.Doc:以文档处理为核心,将 HTML 映射为结构化 Word 元素(段落、样式等),适用于:
- 保留 HTML 结构并生成可编辑 Word。
- 提取带样式的内容(如标题、加粗)。
- 将解析后的 HTML 导出为 RTF、TXT、PDF 等格式。
问题2:如何在 C# 中将 HTML 转为纯文本?
答:要在 C# 中将 HTML 文件转换为纯文本,请通过 GetText() 方法获取其文本内容,然后将结果写入 .txt 文件。
// 创建 Document 对象
Document doc = new Document();
// 加载 HTML 文件
doc.LoadFromFile("sample.html", FileFormat.Html);
// 从 HTML 获取文本
string text = doc.GetText();
// 写入文本文件
File.WriteAllText("HTMLText.txt", text);
问题3:Spire.Doc 能处理不规范 HTML 吗?
答:Spire.Doc 具有良好的容错性,在一定程度上可以处理不完美的 HTML。但是,严重格式错误的 HTML 可能会导致解析问题。为获得最佳结果,请确保您的 HTML 格式良好,或在用 Spire.Doc 解析之前使用 HTML 清理库。
问题4:可以在 ASP.NET Core 应用程序中使用 Spire.Doc 吗?
答:可以。Spire.Doc 完全兼容 ASP.NET Core,其安装和使用过程与其他 .NET 应用程序相同。







