非格式良好的 HTML 解析器和 CSS 解析器






2.86/5 (14投票s)
2007年3月21日
2分钟阅读

114762

990
一个纯 .NET C# 构建的非良构 HTML 解析器和 CSS 解析器
下载 DOLS_HTML.zip - 364.6 KB (10:52, 07/21/2007, GMT +8)
演示
该程序非常简单,用来演示库的功能。
它类似于 MIL HTML 解析器的演示程序 (https://codeproject.org.cn/dotnet/apmilhtml.asp)。
引言
这个库生成一个类似于给定非良构 HTML 文档的 DOM 树的树形结构。
允许开发人员以有条不紊的方式读取、组合和修改树。
该库基于 MIL HTML 解析器,我尝试改进代码页。
编码问题、对标签缺失的容忍度、CSS 解析器和效率。
背景
编写这个库是为了避免在读取非良构 HTML 之前将其转换为 XML。
同时保留了 HTML 的独特品质。
使用代码
// Open HTML file "Google News.htm" DOL.DHtml.DHtmlParser.DHtmlGeneralParser parser = new DOL.DHtml.DHtmlParser.DHtmlGeneralParser(); DOL.DHtml.DHtmlParser.DHtmlDocument htmlDoc = new DOL.DHtml.DHtmlParser.DHtmlDocument(parser); htmlDoc.Load(@"..\Google News.htm"); //You can modify the HTML tree with htmlDoc.Nodes htmlDoc.Save(@"..\Rebuild.htm"); // Dump the information about HTML tree in IDE debug output window StringBuilder builder = new StringBuilder(); htmlDoc.Dump(builder, ""); System.Diagnostics.Debug.Write("\n" + builder.ToString());
调试输出信息
├对象 DHtmlDocument 转储
│ DHtmlNode 数量:6
│ 在下面进行深度转储
│ │
│ ├对象 DHtmlComment 转储
│ │ 节点 ID:1
│ │ 注释内容
================================================
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
================================================
│ │
│ ├对象 DHtmlText 转储
│ │ 节点 ID:2
│ │ 文本内容是空白
│ │
│ ├对象 DHtmlComment 转储
│ │ 节点 ID:3
│ │ 注释内容
================================================
saved from url=(0033)http://www.google.com/news?ned=us
================================================
│ │
│ ├对象 DHtmlText 转储
│ │ 节点 ID:4
│ │ 文本内容是空白
│ │
│ ├对象 DHtmlElement 转储
│ │ 节点 ID:5
│ │ HTML 标签:<html>
│ │ DHtmlNode 数量:3
│ │ 子对象在下面进行深度转储
│ │ │
│ │ ├对象 DHtmlElement 转储
│ │ │ 节点 ID:6
│ │ │ HTML 标签:<head>
│ │ │ DHtmlNode 数量:30
│ │ │ 子对象在下面进行深度转储
│ │ │ │
│ │ │ ├对象 DHtmlElement 转储
│ │ │ │ 节点 ID:7
│ │ │ │ HTML 标签:<title>
│ │ │ │ DHtmlNode 数量:1
│ │ │ │ 子对象在下面进行深度转储
│ │ │ │ │
│ │ │ │ ├对象 DHtmlText 转储
│ │ │ │ │ 节点 ID:8
│ │ │ │ │ 文本内容:"Google News"
结构图
HTML 解析器
CSS 解析器
历史
- 2007/07/21 修改为在 DHtmlTextProcessor 中每个需要 StringBuilder 实例的方法中创建一个新的 StringBuilder 实例
- 2007/05/13 添加结构图
- 2007/05/01 改进了对属性结构错误的容错性
- 2007/04/29 修复了一个关于标签缺失的 bug
- 2007/03/28 更新演示程序(添加了 CSS 解析器演示)
- 2007/03/27 修复了 DHtmlElement 初始化中的一个 bug
- 2007/03/26
1. 新的演示程序
2. 支持节点层次结构中的“访问者模式” - 2007/03/22 初始发布