65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.86/5 (14投票s)

2007年3月21日

2分钟阅读

viewsIcon

114762

downloadIcon

990

一个纯 .NET C# 构建的非良构 HTML 解析器和 CSS 解析器

下载 DOLS_HTML.zip - 364.6 KB (10:52, 07/21/2007, GMT +8)

演示
Screenshot - demo.jpg

该程序非常简单,用来演示库的功能。
它类似于 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 初始发布
© . All rights reserved.