HtmlDocument

 HtmlDocument类对应着一个HTML文档代码。它提供了创建文档,装载文档,修改文档等等一系列功能,来看看它提供的功能。

一、属性

int CheckSum { get; }           如果 OptionComputeChecksum 设置为 true 之前解析,0 否则获取文档 CRC32 校验和。
Encoding DeclaredEncoding { get; }    获取文档的声明的编码。声明确定编码使用 meta http-equiv ="内容类型"内容 ="文本/html ; charset = XXXXX"html 节点。
HtmlNode DocumentNode { get; }     获取文档的根节点。
Encoding Encoding { get; }        获取文档的输出编码。
IEnumerable<HtmlParseError> ParseErrors { get; }   获取文档在解析过程中,发现的解析错误集合
string Remainder { get; }         获取剩余的文本。如果 OptionStopperNodeName 为空,此属性将始终为空。
int RemainderOffset { get; }        获取原始 Html 文本中其余部分的偏移量。如果 OptionStopperNodeName 为 null,这将返回原始 Html 文本的长度。
Encoding StreamEncoding { get; }     获取文档的流的编码。

二、方法

HtmlAttribute CreateAttribute(string name);           创建一个属性,指定名称
HtmlAttribute CreateAttribute(string name, string value);     创建一个属性,指定名称和值
HtmlCommentNode CreateComment();               创建一个空的注释节点
HtmlCommentNode CreateComment(string comment);       使用指定的名称创建一个注释节点
HtmlNode CreateElement(string name);              使用指定的名称创建一个 HTML 元素节点。
XPathNavigator CreateNavigator();                 创建一个XPathNavigator 对象
HtmlTextNode CreateTextNode();                 创建一个文本节点
HtmlTextNode CreateTextNode(string text);           创建一个文本节点,并用参数的值赋值
Encoding DetectEncoding(Stream stream);             检测到的 HTML 流的编码。
Encoding DetectEncoding(string path);               检测编码的 HTML 文本。
Encoding DetectEncoding(TextReader reader);           检测到的关于 TextReader 提供 HTML 文本的编码。
void DetectEncodingAndLoad(string path);             检测到第一,从一个文件的 HTML 文档的编码,然后加载该文件。 
void DetectEncodingAndLoad(string path, bool detectEncoding); 检测到第一,从一个文件的 HTML 文档的编码,然后加载该文件。 
Encoding DetectEncodingHtml(string html);            检测编码的 HTML 文本。
HtmlNode GetElementbyId(string id);               根据Id查找一个节点
static string GetXmlName(string name);             获取一个有效的 XML 名称。
static string HtmlEncode(string html);              静态方法,对一个字符串进行HTML编码
static bool IsWhiteSpace(int c);                  确定指定的字符是否是一个空白字符。
void Load(Stream stream);                    从流中加载一个文档
void Load(string path);                      从路径中加载一个文档
void Load(TextReader reader);
void Load(Stream stream, bool detectEncodingFromByteOrderMarks);
void Load(Stream stream, Encoding encoding);
void Load(string path, bool detectEncodingFromByteOrderMarks);
void Load(string path, Encoding encoding);
void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks);
void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks);
void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize);
void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize);
void LoadHtml(string html);                    从字符串中加载一个文档
void Save(Stream outStream);                   将当前HTML文档保存入流
void Save(StreamWriter writer);
void Save(string filename);                     将HTML文档保存到指定的路径
void Save(TextWriter writer);
void Save(XmlWriter writer);
void Save(Stream outStream, Encoding encoding);
void Save(string filename, Encoding encoding);

属性代码示例:

        static void Main(string[] args)
{
WebClient wc = new WebClient();
wc.BaseAddress = "http://www.juedui100.com/";
wc.Encoding = Encoding.UTF8;
HtmlDocument doc = new HtmlDocument();
string html = wc.DownloadString("user/6971070.html");
doc.LoadHtml(html); int i = doc.CheckSum; //如果 OptionComputeChecksum 设置为 true 之前解析,0 否则获取文档 CRC32 校验和。
Console.WriteLine(i); //输出 0 Encoding enc = doc.DeclaredEncoding; //获取文档的声明的编码。
Console.WriteLine(enc.BodyName); //输出 utf-8 HtmlNode node = doc.DocumentNode; //获取文档的根节点
Console.WriteLine(node.Name); //输出 #document Encoding enc1 = doc.Encoding; //获取文档的输出编码
Console.WriteLine(enc1.BodyName); //输出utf-8 IEnumerable<HtmlParseError> eList = doc.ParseErrors; //文档在解析过程中发现的解析错误集合 string str = doc.Remainder; //获取剩余的文本。
Console.WriteLine(str); //什么都没输出 int offset = doc.RemainderOffset; //获取原始 Html 文本中其余部分的偏移量。
Console.WriteLine(offset); //输出 25762 Encoding enc2 = doc.StreamEncoding;
Console.WriteLine(enc2.BodyName); Console.ReadKey();
}

方法代码示例:

用于测试的HTML代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body> </body>
</html>

主程序代码:

        static void Main(string[] args)
{
HtmlDocument doc = new HtmlDocument();
doc.Load(@"D:\1234.html"); //此方法有11个重载,支持各种加载Html文档
//Console.WriteLine(doc.DocumentNode.InnerHtml); 已经加载成功,输出D:123.html的页面代码
HtmlNode node1 = doc.CreateElement("div"); //本文档创建一个节点
node1.InnerHtml = "我是一个div";
doc.DocumentNode.SelectSingleNode("//body").AppendChild(node1); //将节点追加到body里 HtmlAttribute attr = doc.CreateAttribute("class", "class1");
doc.DocumentNode.SelectSingleNode("/html/body/div[1]").Attributes.Add(attr); //此方法也可以用两个参数添加。
//以上代码执行之后 body里的内容变为 <body><div class="class1">我是一个div</div></body> 看到属性又被添加进去了 HtmlCommentNode cNode = doc.CreateComment();
cNode.Comment = "<!--这是一段注释-->"; //应该不是这样写的吧?可能是我写错了,先跳过这一段
doc.DocumentNode.SelectSingleNode("/html/body/div[1]").AppendChild(cNode); //虽然达到了目的,但是应该不是这样写的吧
//执行之后
//<body>
// <div class="class1">我是一个div<!--这是一段注释--></div> 留意到注释节点已添加进去了
//</body> HtmlTextNode tNode = doc.CreateTextNode("我是一个文本节点");
doc.DocumentNode.SelectSingleNode("/html/body/div[1]").AppendChild(tNode);
//执行之后
//<body>
// <div class="class1">我是一个div<!--这是一段注释-->我是一个文本节点</div> //留意到文本节点已添加进去了
//</body> Encoding enc = doc.DetectEncoding(@"D:\1234.html"); //3个重载,应该是从流中,TextWriter中和 路径中检测编码
//Console.WriteLine(enc.BodyName); //获取不到对象,不知道哪里错了 HtmlNode node = doc.CreateElement("p");
node.InnerHtml = "我是一个p";
HtmlAttribute attr2 = doc.CreateAttribute("id","id1");
node.Attributes.Add(attr2);
doc.DocumentNode.AppendChild(node); HtmlNode node2 = doc.GetElementbyId("id1"); //根据Id查找节点
Console.WriteLine(node2.InnerText); //输出 我是一个p string strHtml = "<b>我是一个加粗节点</b>";
string s = HtmlDocument.HtmlEncode(strHtml);
Console.WriteLine(s); //输出 &lt;b&gt;我是一个加粗节点&lt;/b&gt; 这是经过HTML编码的字符串 string str = HtmlDocument.GetXmlName("<sss"); //根据字符串获取一个有效的XML名称
Console.WriteLine(str); //输出 _3c_sss Console.WriteLine(HtmlDocument.IsWhiteSpace(10)); //True
Console.WriteLine(HtmlDocument.IsWhiteSpace(101)); //False doc.Save(@"D:\123.html"); //Save方法有多个重载,可以通过流,路径,并且还能指定编码等等。 HtmlDocument doc1 = new HtmlDocument();
string html = File.ReadAllText(@"D:\123.html");
doc1.LoadHtml(html); //此方法表示从一个字符串中载入HtmlDocument Console.ReadKey();
}

HtmlDocument的更多相关文章

  1. 如何解决Selenium中"Cannot find function addEventListener in object [object HTMLDocument]"的错误

    project: blog target: how-to-resolve-cannot-find-function-addEventListener-error-in-selenium.md stat ...

  2. DOM笔记(一):HTMLDocument接口

    操作HTML文档的第一步就是获取对文档元素的引用,每一个元素在DOM中就是一个节点,所有的元素在DOM中构成一个节点树. 用于获取元素节点定义的方法定义于HTMLDocument接口,window.d ...

  3. C# HtmlDocument和HtmlNode的使用以及节点的模糊查询

    C#HtmlAgilityPack.HtmlDocument和HtmlAgilityPack.HtmlNode的使用 HtmlAgilityPack.HtmlDocument response = n ...

  4. 记录下DynamicXml和HtmlDocument 使用方式

    之前解析都是XmlDocument.Load 而现在可以利用DynamicXml生成Dynamic对象实现强类型操作,很好用. /// <summary> /// 根据Xml路径动态解析成 ...

  5. 全栈JavaScript之路(十六)HTML5 HTMLDocument 类型的变化

    HTML5 扩展了 HTMLDocument, 添加了新的功能. 1.document.readState = 'loading' || 'complete'  //支持readyState 属性的浏 ...

  6. Document、HTMLDocument关系的探究

    首先贴上代码: console.log(Object.getPrototypeOf(document)); console.log(Object.getPrototypeOf(Object.getPr ...

  7. stickUp.js:98 Uncaught ReferenceError: vartop is not defined at HTMLDocument.<anonymous> (stickUp.js:98)

    附加var vartop = 0;在var topMargin = 0;这之后,这里是我附加的代码:$(document).ready(function(){ var contentButton = ...

  8. HTMLDocument的变化

    H5扩展了一些新的功能 1.readyState 属性的两个属性值 loading 正在加载文档 complete 已经加载完文档 可以根据对象的状态触动触发函数 2.兼容模式 IE6开始区分渲染页面 ...

  9. Html Agility Pack 解析Html

    Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面  用Fir ...

随机推荐

  1. Scrum会议10.20

    Scrum会议   组名称:好好学习 项目名称:记账本 参会成员:林莉(Master)胡丽娜 汪东涵 宫丽君 时间:2016.10.20 已完成内容: 1.理解项目和代码. 2.讨论新功能. 计划完成 ...

  2. Python学习笔记-Day5

    冒泡算法: 实现1: a = [,,,,,,,,,,,,,,] def bubble(badlist): sort = False while not sort: sort = True ): ]: ...

  3. 【笔记】CAP原理和BASE思想

    摘自http://www.jdon.com/37625 分布式领域CAP理论,Consistency(一致性), 数据一致更新,所有数据变动都是同步的Availability(可用性), 好的响应性能 ...

  4. centos上手动编译安装tmux的问题

    https://blog.linuxeye.com/323.html 装个tmux也是不容易.. 关键词:libevent要自己下载2.0版,然后编译.安装时还要各种参数指定目录.

  5. VB.NET上传附件代码

    '附件添加 按钮 点击事件 吴翰哲 2013年7月23日 16:53:19 Protected Sub BtnAddFile_Click(ByVal sender As Object, ByVal e ...

  6. MongoDB介绍与windows下安装

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类 似json的bjson格式,因此可以存储比较复杂的数据类型. ...

  7. Floyd 求最短路(poj 1161)

    Floyd-Warshall算法介绍: Floyd-Warshall算法的原理是动态规划. 设为从到的只以集合中的节点为中间节点的最短路径的长度. 若最短路径经过点k,则: 若最短路径不经过点k,则. ...

  8. xtrabackup工具

    xtrabackup是基于InnoDB存储引擎灾难恢复的.它复制InnoDB的数据文件,尽管数据文件在内部是非一致性的,但在执行灾难恢复时可以保证这些数据文件是一致的,并且可用. 官方原理 在Inno ...

  9. 「2013-9-5」Configure WingIDE for better display of East Asian Glyphs

    很久没写软件配置相关的博客了.这次对于 WingIDE 在 Windows 下的字体配置,折腾了好一阵子,略曲折,也反映了「不清楚原理和背景的情况下,盲人摸象的效率低下是必然」这条放之四海而皆准的赤果 ...

  10. 【11_83】Remove Duplicates from Sorted List

    这道题本质上不难,难的是细节处理,容易出错. 第一遍写的代码越改越大,越臃肿,此时,不如推倒重写,果然,第二次一遍过. Remove Duplicates from Sorted List My Su ...