HtmlDocument
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); //输出 <b>我是一个加粗节点</b> 这是经过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的更多相关文章
- 如何解决Selenium中"Cannot find function addEventListener in object [object HTMLDocument]"的错误
project: blog target: how-to-resolve-cannot-find-function-addEventListener-error-in-selenium.md stat ...
- DOM笔记(一):HTMLDocument接口
操作HTML文档的第一步就是获取对文档元素的引用,每一个元素在DOM中就是一个节点,所有的元素在DOM中构成一个节点树. 用于获取元素节点定义的方法定义于HTMLDocument接口,window.d ...
- C# HtmlDocument和HtmlNode的使用以及节点的模糊查询
C#HtmlAgilityPack.HtmlDocument和HtmlAgilityPack.HtmlNode的使用 HtmlAgilityPack.HtmlDocument response = n ...
- 记录下DynamicXml和HtmlDocument 使用方式
之前解析都是XmlDocument.Load 而现在可以利用DynamicXml生成Dynamic对象实现强类型操作,很好用. /// <summary> /// 根据Xml路径动态解析成 ...
- 全栈JavaScript之路(十六)HTML5 HTMLDocument 类型的变化
HTML5 扩展了 HTMLDocument, 添加了新的功能. 1.document.readState = 'loading' || 'complete' //支持readyState 属性的浏 ...
- Document、HTMLDocument关系的探究
首先贴上代码: console.log(Object.getPrototypeOf(document)); console.log(Object.getPrototypeOf(Object.getPr ...
- 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 = ...
- HTMLDocument的变化
H5扩展了一些新的功能 1.readyState 属性的两个属性值 loading 正在加载文档 complete 已经加载完文档 可以根据对象的状态触动触发函数 2.兼容模式 IE6开始区分渲染页面 ...
- Html Agility Pack 解析Html
Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面 用Fir ...
随机推荐
- Java核心知识点学习----使用Condition控制线程通信
一.需求 实现线程间的通信,主线程循环3次后,子线程2循环2次,子线程3循环3次,然后主线程接着循环3次,如此循环3次. 即:A->B->C---A->B->C---A-> ...
- 测试C++代码与WebBrowser HTML的互动
testWebBrowserDlg.h // testWebBrowserDlg.h : 头文件 // #pragma once #include "explorer1.h" #i ...
- JProfiler使用入门(一)——准备工作
JProfiler是一个全功能的Java剖析工具(profiler),主要用于检查和跟踪系统(限于Java开发的)的性能. JProfiler可以通过时时的监控系统的内存使用情况,随时监视垃圾回收 ...
- div box container随主体内容自动扩展适应的实现
/**顶部部分*/ .con-tl{ background:url(../images/left.png) no-repeat 0 0 rgba(0, 0, 0, 0); padding-left: ...
- OA项目之导入
内容显示页: protected void btnIMP_Click(object sender, EventArgs e) { Response.Redire ...
- freeCodeCamp:Repeat a string repeat a string
重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串. /*思路 fo循环将字符串重复num次并组成数组 将数组组成新的字符串并返回 */ function repeat(str, ...
- 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
public class Three_03 { public static void main(String[] args) { for(int i=100;i<1000;i++){ int a ...
- STL之map应用 +hash表(51nod 1095)
题目:Anigram单词 题意:给出词典,再给出一些单词,求单词的Anigram数量. 思路:先将字串转换成哈希表,然后再用map链接. hash表构造方法汇总:http://www.cnblogs. ...
- BZOJ4293 [PA2015]Siano(线段树)
传送门 这Seg确实不好写,不过因为它与ai的相对顺序无关,所以,我们在对ai排序之后,就可做了.维护一个区间最大值,维护一个和,维护一个区间赋值的懒标记,再维护一个时间变化的标记就可以了. 因为不论 ...
- 修改VNC分辨率大小
实验系统是centos6.5,在被连接的机器上需要安装vncserver. 1.第一种方法:使用geometry参数进行调整使用man命令获得关于geometry参数的描述[root@secdb ~] ...