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. unity3d 游戏插件 溶解特效插件 - Dissolve Shader

    unity3d 游戏插件 溶解特效插件 - Dissolve Shader   链接: https://pan.baidu.com/s/1hr7w39U 密码: 3ed2

  2. apache.http.client.HttpClient

    前言 HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 java net包中已经提 ...

  3. mybatis mapper.xml 配置文件问题(有的错误xml是不报的) 导致服务无法启动 。

    转载自 开源编程 一舟mybatsi xml编译报错,tomcat启动一直循环,导致内存溢出,启动失败 mapper.xml怎么知道有没有编译错误,哪个位置有错误 这应该是mybatis的一个bug, ...

  4. Hibernate缓存之初探

    数据层的访问效率优化可能第一想到的就是利用缓存,缓存的机能可以简单理解为将从数据库中访问的数据放在内存中,在以后再次使用到这些数据时可以直接从内存中读取而不必要再次访问数据库,尽量减少和数据库的交互提 ...

  5. eclipse启动无响应,停留在Loading workbench状态,或老是加载不了revert resources

    做开发的同学们或多或少的都会遇到eclipse启动到一定程度时,就进入灰色无响应状态再也不动了.启动画面始终停留在Loading workbench状态.反复重启,状态依旧. 多数情况下,应该是非正常 ...

  6. 递推 N三角形问题

    Description 用N个三角形最多可以把平面分成几个区域? Input 输入数据的第一行是一个正整数T(1<=T<=10000),表示测试数据的数量.然后是T组测试数据,每组测试数据 ...

  7. Html/Css(新手入门第一篇)

    一.理解web标准含义--为什么采用web标准*****将内容与样式分离1.web标准是一系列标准,就是一系列技术标准在使用时,是组合应用[1].结构化内容 html[2].表现化内容 css[3]. ...

  8. Jade之Template Inheritance

    Template inheritance jade支持通过关键字block和extends来实现模板继承. 比如,在layout.jade写上如下代码 html head title My Site ...

  9. Valid Sudoku leetcode

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  10. haskell中的cps

    cps全称叫continuation passing style,简要来讲就是告诉函数下一步做什么的递归方式,由于普通递归有栈溢出的问题,而cps都是尾递归(tail recursion),尾递归则是 ...