真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c#常見的問題有哪些

今天小編給大家分享一下c#常見的問題有哪些的相關知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供馬鞍山網(wǎng)站建設、馬鞍山做網(wǎng)站、馬鞍山網(wǎng)站設計、馬鞍山網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、馬鞍山企業(yè)網(wǎng)站模板建站服務,十多年馬鞍山做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

Html Agility Pack 源碼中的類大概有28個左右,其實不算一個很復雜的類庫,但它的功能確不弱,為解析DOM已經(jīng)提供了足夠強大的功能支持,可以跟jQuery操作DOM媲美:)

Html Agility Pack最常用的基礎類其實不多,對解析DOM來說,就只有HtmlDocument和HtmlNode這兩個常用的類,還有一個 HtmlNodeCollection集合類。

當然在解析DOM前需要加載html原始文件或者html的字符串,HtmlDocument類封裝了支持此功能的方法,下面是加載html的方法介紹。

HtmlDocument類定義了多個重載的Load方法來實現(xiàn)以不同方式加載html,其實主要分為兩種,一種是從Stream中加載html,另外一種是從物理路徑加載html,分別見下面:

方法:public void Load(TextReader reader)

說明:從指定的 TextReader對象中加載Html

示例:

HtmlDcument doc?=new?HtmlDocument();

StreamReader sr?=?File.OpenText("file path");

doc.Load(sr);

基于上面方法,衍生出了幾個不同重載方法。

以指定的Stream對象為主的有:

(1)public void Load(Stream stream)? ///從指定的Stream對象中加載html;

(2)public void Load(Stream stream, bool detectEncodingFromByteOrderMarks)? ///指定是否從順序字節(jié)流中解析編碼格式

(3)public void Load(Stream stream, Encoding encoding)? ///指定編碼格式

(4)public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks)

(5)public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize)

以指定的物理路徑為主的有:

(1)public void Load(string path)

(2)public void Load(string path, bool detectEncodingFromByteOrderMarks)? ///指定是否從順序字節(jié)流中解析編碼格式

(3)public void Load(string path, Encoding encoding)? ///指定編碼格式

(4)public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks)

(5)public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize)

HtmlDocument類中還定義了直接從html字符串中加載Html,如下:

方法:public void LoadHtml(string html)

說明:從指定的html字符串中加載html

示例:

HtmlDocument doc?=new?HtmlDocument();

string?html?="

Hello World!

";

doc.LoadHtml(html);

HtmlDocument類還有其他寫DOM方法的定義,這里不作詳細介紹,留作以后專門介紹Html Agility Pack寫DOM章節(jié)介紹吧,這里著重介紹Html Agility pack解析DOM的細節(jié)。

通過HtmlDocument把html加載進來后,接著是要做什么呢?當然是對html解析了,解析DOM就需要提到HtmlNode類 了。 HtmlDocument類由屬性DocumentNode屬性返回當前Html解析后的一個全局的HtmlNode對象;如果想獲取某一個元素的 HtmlNode,可以通過HtmlDocument類的GetElementbyId(string Id)方法來獲取,返回指定某一個html元素的HtmlNode對象。如何通過HtmlNode對象來訪問DOM呢?介紹之前先對它的功能了解下。

HtmlNode類實現(xiàn)了IXPathNavigable接口,這說明了它可以通過xpath來查詢DOM了,如果對System.Xml 命名空間下的 XmlDocument類了解的,特別是使用過了SelectNodes()和SelectSingleNode()方法的朋友對使用HtmlNode類 將會很熟悉。其實Html Agility Pack內(nèi)部是把html解析成xml文檔格式了的,所以支持xml中的一些常用查詢方式。下面對HtmlNode的一些主要的常用成員作簡要的說明。

1)Attributes屬性

獲取當前Html元素的屬性的集合,返回的是一個HtmlAttributeCollection對象。如一個div元素,它可能會定義一些屬性, 如:

***
,那Attributes返回的HtmlAttributeCollection就包含了 “id,name,class,title”的信息。HtmlAttributeCollection類是實現(xiàn)了接口 IList的一個集合類,故此可以通過下面代碼方式訪問每一個成員。

HtmlNode node?=?doc.GetElementbyId("title");

string?titleValue?=?node.Attributes["title"].Value;

或者

foreach(HtmlAttribute attr?in?node.Attributes)

{

Console.WriteLine("{0}={1}",attr.Name,attr.Value);

}

在獲取屬性值時,如果某一個屬性名稱不存在的話,Attributes["name"]返回的是null值。

2)FirstChild,LastChild,ChildNodes,ParentNode屬性

FirstChild屬性:返回所有子節(jié)點的第一個節(jié)點,如下面代碼:

string?html?="

Hello World!

inner div
";

FirstChild則返回的是“

Hello World!

” 的節(jié)點。

LastChild屬性:返回所有子節(jié)點的最后一個節(jié)點,以上面的html為例,則返回“

inner div
”節(jié)點。

ChildNodes屬性:返回當前節(jié)點所有直接一代的子節(jié)點的集合,不包括跨代子節(jié)點,以上面的html為例,則返回“

Hello World!

” 和“
inner div
”兩個節(jié)點。

ParentNode屬性:返回當前節(jié)點的直接父節(jié)點。

3)獲取Html源碼和文本

HtmlNode類設計了OuterHtml屬性和InnerHtml屬性用于獲取當前節(jié)點的Html源碼。兩者不同之處 是,OuterHtml屬性返回的是包含當前節(jié)點的Html代碼在內(nèi)的所有Html代碼,而InnerHtml屬性返回的是當前節(jié)點里面子節(jié)點的所有 Html代碼。如下面:

如要獲取節(jié)點的文本值,通過InnerText屬性來獲取,InnerText屬性過濾掉了所有的Html標記代碼,只返回文本值,如下面:

Console.WriteLine(node.InnerText);///?return "Hello World!";

HtmlNode類提供了足夠豐富的方法供查詢當前節(jié)點下的子節(jié)點(元素),當然也包括查詢當前節(jié)點的父節(jié)點(元素)的方法,下面列出主要的方法和使用說明。

獲取父節(jié)點的系列方法:

1)public IEnumerable Ancestors()

獲取當前節(jié)點的父節(jié)點列表(不包含自身)。

2)public IEnumerable Ancestors(string name)

以指定一個名稱來獲取父節(jié)點的列表(不包含自身)。

3)public IEnumerable AncestorsAndSelf()

獲取當前節(jié)點的父節(jié)點列表(包含自身)。

4)public IEnumerable AncestorsAndSelf(string name)

以指定一個名稱來獲取父節(jié)點的列表(包含自身)。

獲取子節(jié)點的系列方法:

1)public IEnumerable DescendantNodes()

獲取當前節(jié)點下的所有子節(jié)點的列表,包括子節(jié)點的子節(jié)點(不包含自身)。

2)public IEnumerable DescendantNodesAndSelf()

獲取當前節(jié)點下的所有子節(jié)點的列表,包括子節(jié)點的子節(jié)點(包含自身)。

3)public IEnumerable Descendants()

獲取當前節(jié)點下的直接子節(jié)點的列表(不包含自身)。

4)public IEnumerable DescendantsAndSelf()

獲取當前節(jié)點下的直接子節(jié)點的列表(包含自身)。

5)public IEnumerable Descendants(string name)

獲取當前節(jié)點下的以指定名稱的子節(jié)點列表。

6)public IEnumerable DescendantsAndSelf(string name)

獲取當前節(jié)點下的以指定名稱的子節(jié)點的列表(包含自身)。

7)public HtmlNode Element(string name)

獲取第一個符合指定名稱的直接子節(jié)點的節(jié)點元素。

8)public IEnumerable Elements(string name)

獲取符合指定名稱的所有直接子節(jié)點的節(jié)點列表。

9)public HtmlNodeCollection SelectNodes(string xpath)

獲取符合指定的xpath的子節(jié)點列表。

10)public HtmlNode SelectSingleNode(string xpath)

獲取符合指定的xpath的單個字節(jié)點元素。

查詢節(jié)點的方法主要是上面10個方法,該類還有其他寫節(jié)點的系列方法,這里不詳細介紹寫操作的方法,留作以后詳細介紹。

結合Xpath進行查詢節(jié)點是功能比較強大,這像操作xml那樣方便。

簡單例子的代碼

下面例子是把博客園的精華區(qū)博客列表查詢出來。執(zhí)行結果如下面:

代碼

using?System;

using?System.Collections.Generic;

using?System.Linq;

using?System.Text;

using?System.IO;

using?HtmlAgilityPack;

namespace?DemoCnBlogs

{

class?Program

{

staticvoid?Main(string[] args)

{

HtmlWeb web?=new?HtmlWeb();

HtmlDocument doc?=?web.Load("");

HtmlNode node?=?doc.GetElementbyId("post_list");

StreamWriter sw?=?File.CreateText("log.txt");

foreach(HtmlNode child?in?node.ChildNodes)

{

if?(child.Attributes["class"]?==null||?child.Attributes["class"].Value?!="post_item")

continue;

HtmlNode hn?=?HtmlNode.CreateNode(child.OuterHtml);

///如果用child.SelectSingleNode(""titlelnk"]").InnerText這樣的方式查詢,是永遠以整個document為基準來查詢,

///這點就不好,理應以當前child節(jié)點的html為基準才對。

Write(sw, String.Format("推薦:{0}", hn.SelectSingleNode("http://*[@class=\"diggnum\"]").InnerText));

Write(sw, String.Format("標題:{0}", hn.SelectSingleNode("http://*[@class=\"titlelnk\"]").InnerText));

Write(sw, String.Format("介紹:{0}", hn.SelectSingleNode("http://*[@class=\"post_item_summary\"]").InnerText));

Write(sw, String.Format("信息:{0}", hn.SelectSingleNode("http://*[@class=\"post_item_foot\"]").InnerText));

Write(sw,?"----------------------------------------");

}

sw.Close();

Console.ReadLine();

}

staticvoid?Write(StreamWriter writer,?string?str)

{

Console.WriteLine(str);

writer.WriteLine(str);

}

}

}

以上就是“c#常見的問題有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享題目:c#常見的問題有哪些
本文路徑:http://weahome.cn/article/piodso.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部