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. 发布一个UDP调试助手

    UDP协议适用于那种频繁通信,但是可以容忍一些丢包的应用,比如GPS的定位应用. 调试UDP助手,可以定时发送,输出文本, 记录收到时间. 1. 该工具基于IOCP网络模型,调试UDP服务使用的一个工 ...

  2. perl小记

    perl是一种运行式脚本,所以在debug的时候,多用print,在后台看有没有输出相关的结果,来判断相应的错误. 部分perl正则表达式: $gene =~/^LOC/  以“LOC”开头的字符串 ...

  3. servers中添加server时,看不到运行环境的选择。

    servers中添加server时,看不到运行环境的选择. 主要原因是tomcat目录中的配置文件格式不对.

  4. php执行流程

    1.源码文件编写,php源文件 2.词法分析,token 3.语法分析,生成opcode并组成opcode array 4.执行opcode,返回结果

  5. 斯坦福第四课:多变量线性回归(Linear Regression with Multiple Variables)

    4.1  多维特征 4.2  多变量梯度下降 4.3  梯度下降法实践 1-特征缩放 4.4  梯度下降法实践 2-学习率 4.5  特征和多项式回归 4.6  正规方程 4.7  正规方程及不可逆性 ...

  6. IPD模式下开展敏捷开发的一些问题汇总

    1.      我们现在普遍用的是老系统情况下,什么时候把软件和硬件在敏捷项目里面集成? 答:有两种场景:第一种场景是把软件分几个迭代,最后把软件和硬件一起集成:第二种场景是更好的一种场景,每几个迭代 ...

  7. dojo对数组的处理函数,dojo.forEach、dojo.every、 dojo.some、 dojo.map等

    转自:http://jiataodong.blog.163.com/blog/static/3490549220111024111943439/ 数组处理是 Ajax 应用开发中的常见操作.Dojo ...

  8. 《理解 ES6》阅读整理:函数(Functions)(二)Unnamed Parameters

    使用未命名参数(Working with Unnamed Parameters) JavaScript并不限制传递给函数的实参个数,你可以总是传递比形参个数多或者少的实参.在ES6中当向函数传递比形参 ...

  9. 在CS代码页获取input输入框内肉----.net学习点滴

    想在后台cs页面得到前台页面aspx中html控件input输入的值.通过访问input输入框的name属性值获取. 解决方法如下: 1.用Request["user"].toSt ...

  10. Android 5.x特性概览二

    上文 ,对Android 5.X特性,主要是Material Design的特性进行了介绍,这篇文章我们来使用Material Design主题. Material Design 现在有三种默认的主题 ...