日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
看如何用Visual C#制作新聞閱讀器

用Visual C#制作新聞閱讀器:弄清結(jié)構(gòu)再動(dòng)手

要想輕松的抽取RSS信息,自然先要了解它的結(jié)構(gòu),所謂“知己知彼,百戰(zhàn)不殆”嘛。

1、RSS的結(jié)構(gòu)

我們先打開百度新聞一個(gè)RSS鏈接,如果你再多打開幾個(gè)別的網(wǎng)站的RSS鏈接,會(huì)發(fā)現(xiàn)他們都有大致相同的結(jié)構(gòu)。而我們?cè)诮颐豏SS(上)中為大家講解的其實(shí)就是編成實(shí)現(xiàn)這樣的一個(gè)XML文件。

為了能夠方便地對(duì)這樣的XML文檔進(jìn)行處理,在本文里,我們使用C#作為開發(fā)的語言。

分析整個(gè)RSS鏈接后,我們知道RSS大致的結(jié)構(gòu)入圖1。

2、抽取的原理

知道了結(jié)構(gòu),我們還要知道結(jié)構(gòu)中各部分的含義。在圖1中RSS節(jié)點(diǎn)表示當(dāng)前是一個(gè)RSS文件,它由一個(gè)CHANNEL節(jié)點(diǎn)及其子節(jié)點(diǎn)組成,其中一些子節(jié)點(diǎn)提供關(guān)于頻道本身的信息,比如title表示頻道的名稱(“百度互聯(lián)網(wǎng)新聞”)。

CHANNEL節(jié)點(diǎn)又包含多個(gè)ITEM子節(jié)點(diǎn),而ITEM節(jié)點(diǎn)就是程序需要處理的部分,因?yàn)樗鼘?duì)應(yīng)著每條實(shí)際的新聞項(xiàng)信息, 每個(gè)ITEM節(jié)點(diǎn)又通過其子節(jié)點(diǎn)提供關(guān)于這條新聞的詳細(xì)信息,比如title表示新聞的標(biāo)題(“微軟IM稱王”),link對(duì)應(yīng)新聞實(shí)際的鏈接。

RSS具體規(guī)范可查看http://blogs.law.harvard.edu/tech/rss

知道了這些后,要編程就不困難啦。我們只需提取并顯示出CHANNEL和ITEM下的各條信息就可以了?,F(xiàn)在來看看具體的實(shí)現(xiàn)方法吧。

用Visual C#制作新聞閱讀器:做個(gè)程序讀新聞

對(duì)RSS有一定了解后,我們開始編寫程序。先還是需要一個(gè)最簡(jiǎn)單的界面。新建一個(gè)Win Form 工程,在Form上放置一個(gè)Label,一個(gè)文本框txtURL用來輸入RSS鏈接(就是各網(wǎng)站RSS鏈接中包含的地址),一個(gè)按鈕bnRead用來執(zhí)行讀取新聞, 一個(gè)TreeView樹形控件treeRSS顯示讀出的新聞項(xiàng)。

1、定義裝載結(jié)構(gòu)

根據(jù)上面分析的RSS結(jié)構(gòu),我們首先來建立一個(gè)rss類,用它來裝載RSS鏈接中CHANNEL和ITEM的各條信息。代碼如下:

 
 
 
 
  1. public class rss  
  2. {  
  3.  public struct Channel  
  4.  {  
  5.   public string Title;  
  6.   public Hashtable Items;  
  7.  }  
  8.  
  9.  public struct Item  
  10.  {  
  11.   public string Title;  
  12.   public string Description;  
  13.   public string Link;  
  14.  }  
  15. }  

Channel結(jié)構(gòu)將存儲(chǔ)CHANNEL節(jié)點(diǎn)包含的所有子節(jié)點(diǎn)信息,其中Items成員字段是一個(gè)Hashtable集合,程序會(huì)將Item結(jié)構(gòu)作為對(duì)象加入集合,用來存儲(chǔ)Channel下的所有Item節(jié)點(diǎn)。這里我只讀取了有限的幾個(gè)節(jié)點(diǎn),讀者可以根據(jù)實(shí)際需要擴(kuò)展整個(gè)結(jié)構(gòu)定義。

2、從RSS鏈接中獲取新聞信息

現(xiàn)在我們就可以開始編寫讀取函數(shù),將抽取出的RSS信息放入上面設(shè)計(jì)好的結(jié)構(gòu)中。

C#提供了專門的類來訪問XML, 使我們能夠輕松地讀出RSS的內(nèi)容。代碼如下:

 
 
 
 
  1. XmlTextReader Reader = new XmlTextReader(URL);  
  2. XmlValidatingReader Valid = new XmlValidatingReader(Reader);  
  3. Valid.ValidationType = ValidationType.None;  
  4. XmlDocument xmlDoc= new XmlDocument();  
  5. xmlDoc.Load(Reader);  

使用XmlDocument類將txtURL中輸入的RSS鏈接加載后,首先通過FoundChildNode函數(shù),找到Channel節(jié)點(diǎn)。

 
 
 
 
  1. private XmlNode FoundChildNode(XmlNode Node,string Name)  
  2. {  
  3.  XmlNode childlNode = null;  
  4.  for (int i=0;i <  Node.ChildNodes.Count;i++)  
  5.  {  
  6.   if ( Node.ChildNodes[i].Name == Name && Node.ChildNodes[i].ChildNodes.Count > 0 )  
  7.   {  
  8.    childlNode = Node.ChildNodes[i];  
  9.    return childlNode;  
  10.   }  
  11.  }  
  12.  return childlNode;  
  13. }  
  14. XmlNode rssNode = FoundChildNode(xmlDoc,"rss");  
  15. XmlNode channelNode = FoundChildNode(rssNode,"channel"); 

然后我們就可以遍歷它的子節(jié)點(diǎn),根據(jù)子節(jié)點(diǎn)的Name屬性,讀取我們需要的信息。

 
 
 
 
  1. rss.Channel channel=new rss.Channel();  
  2. channel.Items=new Hashtable();  
  3. {  
  4.  switch ( channelNode.ChildNodes[i].Name )  
  5.  {  
  6.   case "title":  
  7.    {  
  8.     channel.Title = channelNode.ChildNodes[i].InnerText;  
  9.     break;  
  10.    }  
  11.   case "item":  
  12.    {  
  13.     rss.Item item=this.getRssItem(channelNode.ChildNodes[i]);  
  14.     channel.Items.Add(channel.Items.Count,item );  
  15.     break;  
  16.    }  
  17.  }  
  18. }  

如果發(fā)現(xiàn)是item子節(jié)點(diǎn),就調(diào)用getRssItem函數(shù),同樣通過遍歷子節(jié)點(diǎn)的方法,將其子節(jié)點(diǎn)內(nèi)容填入Item結(jié)構(gòu)中,然后再添加到Channel結(jié)構(gòu)的Items集合中。因?yàn)楸境绦虿⒉魂P(guān)心添加到集合的鍵值,只需要它是不重復(fù)的值,所以我傳入了Count屬性。

3.將讀出的信息顯示在程序中

將RSS內(nèi)容讀出后,就需要把信息展示給用戶了。我們這里用的是基本的TreeView方法,通過遍歷Channel結(jié)構(gòu)的Items集合,將其標(biāo)題添加到TreeView中。

 
 
 
 
  1. private void ViewRss(rss.Channel channel)  
  2. {  
  3.  treeRss.BeginUpdate();  
  4.  treeRss.Nodes.Clear();  
  5.  TreeNode channelNode=treeRss.Nodes.Add(channel.Title );   
  6.  channelNode.Tag="";  
  7.  for (int i=0;i < channel.Items.Count ;i++)  
  8.  {  
  9.   rss.Item item=(rss.Item)channel.Items[i];  
  10.   TreeNode itemNode=channelNode.Nodes.Add(item.Title );  
  11.   itemNode.Tag=item.Link;  
  12.  }  
  13.  treeRss.ExpandAll();  
  14.  treeRss.EndUpdate();  
  15. }  

同時(shí)我們還可以設(shè)置TreeView的每個(gè)子節(jié)點(diǎn)的Tag屬性為它對(duì)應(yīng)的鏈接。以便當(dāng)選中子節(jié)點(diǎn)時(shí)就可以通過讀取Tag屬性訪問具體的信息。

 
 
 
 
  1. private void treeRss_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)  
  2. {  
  3.  TreeNode itemNode=e.Node ;  
  4.  string URL=itemNode.Tag.ToString();  
  5.  if (URL.Length!=0)  
  6.   System.Diagnostics.Process.Start( URL);  
  7. }   
  8.  

程序運(yùn)行效果如圖2。

 

用Visual C#制作新聞閱讀器:小結(jié)

怎么樣,一個(gè)簡(jiǎn)單的RSS新聞閱讀器就按前面所說輕松完成了,容易吧。雖然它還有很多不足,但如果大家通過這個(gè)例子學(xué)會(huì)了抽取RSS鏈接信息的基本方法,那就足夠了!

【編輯推薦】

  1. 四種C#參數(shù)類型簡(jiǎn)介
  2. Java與C#的不同之處
  3. 學(xué)習(xí)C#程序集
  4. C#和ADO.NET建立數(shù)據(jù)綁定網(wǎng)格
  5. 介紹C# 4.0新特性dynamic

名稱欄目:看如何用Visual C#制作新聞閱讀器
文章URL:http://www.5511xx.com/article/cdgpchi.html