成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

VB2005實現簡單的RSS瀏覽器功能

2010-08-28 10:48:18來源:西部e網作者:

 “沖浪”一詞在五六年前很時髦,現在則是菜鳥的代名詞,老鳥們張嘴就是個性化,而最容易個性化的則是RSS。通過RSS訂閱自己喜歡的內容,不再在網上盲目溜達浪費時間。各大網站也紛紛推出RSS訂閱服務,網上也有不少RSS閱讀器下載,不過作為程序員有必要掌握RSS閱讀器的設計原理和方法。

  RSS提供給網站以一種非常簡單的共享方式來和其他站點或者客戶端程序共享內容。一個RSS Feed,或者可以稱其為頻道(channel),是一個簡單的XML文件,它使用一些預定義的標記(tag)來描述站點和一些項(item)的集合。每個項提供一個標題,一個轉向的URL,和對該項的描述。不同的組織開發了不同版本的RSS,不過它們非常相似。

  RSS瀏覽器的總覽

  使用VB2005編程顯示RSS Feed或者頻道內容是非常簡單的。本文將教會你編寫一個簡單的RSS瀏覽器。這個瀏覽器允許你填寫一個RSS Feed的URL地址,然后它將為你取回該頻道的標題,內容,描述和鏈接等相關信息。它也將獲取和顯示該Feed相關的項的列表。它將每個項的標題顯示在一個listbox里,地址顯示在一個LinkLabel里,項的描述和URL則顯示在一個WebBrower控件里。(見圖1)

圖1

  為了簡單起見,我將只用RSS2.0進行測試。同樣的,我使用VB2005 Express Edition作為開發工具,讀者可以從Microsoft公司得到這個開發工具。

  RSSItem和RSSChannel類

  兩個類組成了這個RSS瀏覽器的核心部分:RSSItem和RSSChannel。RSSItem類是一個簡單的類,它除了構造函數以外不提供其他的方法。RSSItem類簡單的封裝了RSS項的標題、鏈接和描述屬性。

  RSSItem類有3個私有成員其相關屬性。構造函數簡單的將每個成員初始化為空字符串,如下:

Private m_Title As String
Private m_Link As String
Private m_Description As String

Public Sub New()
 Title = "\"
 Link = ""
 Description = ""
End Sub

  RSSChannel類是這個程序真正的核心所在。它像RSSItem類封裝RSS項一樣,封裝了RSS頻道的標題,鏈接和描述等屬性。然而,它真正的功能體現在提供了獲取RSS頻道的信息和頻道相關項的信息的方法。

  RSSChannel類同樣也擁有三個私有成員變量及相關屬性。它還擁有一個私有成員和相關屬性來存儲RSS頻道的URL。構造函數使用一個指向RSS Feed的URL作為參數。它使用此參數來初始化FeedURL,剩下的成員被初始化為空字符串。然后它調用GetChannelInfo來獲取頻道屬性,如下:

Private m_FeedURL As String
Private m_Title As String
Private m_Link As String
Private m_Description As String

Public Sub New(ByVal url As String)
 FeedURL = url
 Title = "\"
 Link = ""
 Description = ""
 GetChannelInfo()
End Sub

  GetChannelInfo 方法

  在這個方法里,程序創建了一個XmlNodeList的對象,并且調用GetXMLDoc函數,將字符串"rss/channel"作為Node路徑。在函數返回的時候,你將獲得一個包含有頻道標題、鏈接和描述屬性的XML的XMLNodeList。通過使用XmlNodeList里存儲的值,你可以設置你的RSSChannel類的屬性,如下:

Private Sub GetChannelInfo()
 Dim rss As XmlNodeList = GetXMLDoc("rss/channel")
 Title = rss(0).SelectSingleNode("title").InnerText
 Link = rss(0).SelectSingleNode("link").InnerText
 Description = rss(0).SelectSingleNode("description").InnerText
End Sub

  GetXMLDoc方法

  GetXMLDoc函數使用一個Node路徑作為參數。該路徑指定了你需要獲取的XML的哪個部分。這個函數首先創建一個空的XmlNodeList,這里將存儲函數返回時的Node內容。然后它創建一個WebRequest和WebResponse對象來從URL里獲取數據,并且取得響應。當你獲取一個響應之后,你可以創建一個Stream對象來存放從WebResponse對象的GetResponseStream方法中獲取的數據。然后你可以創建一個XmlDocument對象并通過Load方法來調用其中的數據。這時,你可以輕松的使用SelectedNodes方法來訪問XML數據,并且指定你想訪問哪個Node:

Private Function GetXMLDoc(ByVal node As String) As XmlNodeList

 Dim tempNodeList As System.Xml.XmlNodeList = Nothing

 Dim request As WebRequest = WebRequest.Create(Me.FeedURL)
 Dim response As WebResponse = request.GetResponse()
 Dim rssStream As Stream = response.GetResponseStream()
 Dim rssDoc As XmlDocument = New XmlDocument()
 rssDoc.Load(rssStream)
 tempNodeList = rssDoc.SelectNodes(node)
                           
 Return tempNodeList
End Function


  然后,你可以使用相同的GetXMLDoc函數來獲取真正的RSS Feed項。

  GetChannelItem方法

  GetChannelItem和GetChannelInfo工作方式非常類似,主要區別在于在這里,你將會處理多個項,這就需要你使用一個For循環來讀入每個項并且存儲在一個ArrayList結構里。如果需要處理所有的項,可以直接返回這個ArraryList對象:

Public Function GetChannelItems() As ArrayList
 Dim tempArrayList As New ArrayList

 Dim Dim rssItems As XmlNodeList = GetXMLDoc("rss/channel/item")
 Dim Dim item As XmlNode
 For Each item In rssItems
  Dim newItem As New RSSItem
  With newItem
   .Title = item.SelectSingleNode("title").InnerText
   .Link = item.SelectSingleNode("link").InnerText
   .Description =item.SelectSingleNode("description").InnerText
  End With
  tempArrayList.Add(newItem)
 Next

 Return tempArrayList
End Function


  結束語

  本文的源代

碼你可以從這里下載,當然你可以給它添加更多的功能,如:

  ·增加錯誤處理代碼,使用Try...Catch...Finally,以處理遇到的一些錯誤;

  ·增加對多個版本的RSS的支持;

  ·擴展RSSChannel類,增加包括語言,文檔,版權,生成器等的信息解析支持,擴展RSSItem類來包含對公布時間,GUID和評論標記的解析支持(當前只支持處理RSS Feed標記);

  ·增強對圖像標記的處理(目前只是提供了一個圖像地址鏈接和標題)

  ·增強同時訪問多個RSS項的處理

  ·增加數據庫支持,來記錄你訪問過的RSS Feed,以及每個頻道里你讀過的的若干項。

關鍵詞:dotnet

贊助商鏈接:

主站蜘蛛池模板: 泸州市| 滨州市| 化州市| 山阴县| 荥经县| 安图县| 浮梁县| 三门峡市| 通江县| 大足县| 涟水县| 寿光市| 拉孜县| 霍山县| 定南县| 从化市| 策勒县| 玉田县| 萝北县| 武穴市| 揭阳市| 宜章县| 永新县| 蒙阴县| 安达市| 盐城市| 于田县| 文山县| 镇平县| 阿尔山市| 小金县| 双城市| 昭通市| 木兰县| 田林县| 乐亭县| 绥中县| 修水县| 鹤壁市| 汕头市| 安阳市|