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);         //输出 我是一个pstring 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));   //TrueConsole.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. Document,Node,Element,HTMLDocument ,HTMLCollection,HTMLElement,NodeList

    这个问题如果不是基于原生js写组件,可能仍然不明不白,既然遇到了,就整理一下. 一.Document,Node,Element的关系 1,Document 对象 Document 对象是一棵文档树的根 ...

  2. Node,Document,HTMLDocument,HTMLCollection解析

    这里说的是XML的这些对象,而HTML是继承这些对象的,并进行了扩展.如Document对象, Node对象 它是一个节点对象,代表文档树中的一个节点.是所有节点类型的基类 Node对象是整个DOM的 ...

  3. Document、HTMLDocument关系的探究

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

  4. C#爬虫,HttpClient请求,HtmlAgilityPack,HtmlDocument使用

    爬虫简介 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程 ...

  5. delphi操作webbrowser htmldocument,操作web界面

    原文地址:https://www.cnblogs.com/endv/p/5983110.html {IHTMLDocument2 方法:} write //写入 writeln //写入并换行 ope ...

  6. c if sortable html,Rails 5 - html5sortable - sortable不是HTMLDocument.ready中的函数

    我正在尝试实现HTML5 Sortable,但在控制台中出现以下错误: Uncaught TypeError: $(...).sortable is not a function at HTMLDoc ...

  7. 文本转换成htmldocument

    HTMLDocumentClass hc = new HTMLDocumentClass();             IHTMLDocument2 doc2 = hc;             do ...

  8. jquery事件绑定的问题Uncaught TypeError: $(...).live is not a function at HTMLDocument.<anonymous> (ex5_

    一.问题 .live(): jQuery 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效. //给a 标签绑定click事件$("a").live(&q ...

  9. java NIO详解

    http://zalezone.cn/2014/09/17/NIO%E7%B2%BE%E7%B2%B9/ 1. 前言 我们在写java程序的时候,为了进行优化,把全部的精力用在了处理效率上,但是对IO ...

最新文章

  1. PJ:细菌挥发性物质和光合信号激活低铁响应途径
  2. (作者:无名`)svn提交代码到本地仓库
  3. 苹果或推中国特色版 iPhone;小米回应萌拍抄袭苹果事件;微软停止审核发布 Windows Phone 8.x | 极客头条...
  4. zipparameters 使用_zip4j的简单运用
  5. [转载]辐射定标、辐射校正、几何校正的区别
  6. php barcode设置黑条宽度,JsBarcode常用参数设置
  7. blender初学实用快捷键
  8. Mac本配置adb环境,通过adb安装apk。
  9. 中国电信物联网平台入门学习笔记2: DOME程序分析
  10. English语法_人称代词 - It
  11. 清华校友、香港科技大学准博士ICCV顶会论文被爆公然抄袭!去年CVPR也是抄的...
  12. linux防火墙之firewalld
  13. 跟我读论文系列之XGBoost
  14. 高精度定位系统精细测距定位
  15. 固态电容和电解电容性能比较
  16. 软件测试永远的家——银行测试,YYDS
  17. vue 如何在 style 标签里使用变量(数据)
  18. Git+Pandoc配置Word文档版本控制
  19. 总结HTTP协议详解
  20. 扫雷计算机教案,四下选修拓展《扫雷游戏》教案

热门文章

  1. Quartz.NET的管理工具
  2. 《响应式Web设计:HTML5和CSS3实践指南》——2.9节基于位置伪类的交替行样式
  3. 聊聊iOS开发中耳机的那点事(监听耳机拔插、耳机线控)-b
  4. 友盟-统计不到线上应用数据的坑
  5. Sql — CTE公用表表达式和With用法总结
  6. 28个HTML5特征、窍门和技术
  7. windows 启用远程服务
  8. 安全证书导入到java中的cacerts证书库
  9. Windows系统安装zabbix-agent客户端
  10. 两个linux之间拷贝文件及文件夹