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();
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM