zoukankan      html  css  js  c++  java
  • 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);                   //输出 &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();
            }
  • 相关阅读:
    matlab2016b -ubuntu 1604 -install- and -trouble -shooting--finally-all is ok!!
    cvpr2017-code-etc
    汇率换算自然语言理解功能JAVA DEMO
    聚焦新相亲时代:女孩在京有五六套房哭着想嫁富2代
    cvpr2017年的所有论文下载
    公司危机、下岗困局、不受重视,程序员该如何面对职场挫折?
    利用CH341A编程器刷新BIOS,恢复BIOS,妈妈再也不用担心BIOS刷坏了
    垃圾人定律和垃圾人生存方式定律
    90后女孩的杀身之祸----悲剧酿成--放弃所有的虚构的故事后,你终会发现,真实平淡的现实才是最美好的。
    仓央嘉措比较著名的诗
  • 原文地址:https://www.cnblogs.com/wymbk/p/5650698.html
Copyright © 2011-2022 走看看