熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

Asp.Net 建立一個在線 RSS 新聞聚合器

2022-06-13   來源: .NET編程 

  概要

  本文講解了如何使用XMLWeb控件獲取遠程XML數據並在ASPNET頁面顯示這些XML數據以及使用Repeater控件發布數據庫中的XML數據在過去的幾年間隨著異構平台間共享數據的需求不斷增長XML的使用也呈爆炸性增長意識到這種趨勢微軟在整個NET框架中對XML提供了健壯的支持這意味著對於ASPNET開發者來說在Web頁面中顯示和處理XML數據從來沒有這麼容易過本文將通過生成一個RSS聚合引擎和在線新聞聚合器來學習XML和ASPNET技術本文假設讀者熟悉ASPNET和XML

  目錄

  簡介
使用RSS規范的聚合內容
通過ASPNET頁面輸出聚合內容
在ASPNET頁面中使用聚合摘要
顯示聚合摘要列表
顯示特定聚合摘要的新聞項
顯示特定新聞項的詳細內容
未來的擴展和當前程序的缺點
總結

  簡介

  隨著辦公室和家庭上網在線時間的延長以及Web站點和可訪問的互聯網應用程序呈持續爆炸性增長應用程序之間能數據共享變得越來越重要在異構平台之間共享數據需要一種平台中立的數據格式這種數據格式要求能易於通過標准的互聯網協議來傳輸而這正是XML的用武之地因為XML文件本質上只是一個文本文件其編碼格式眾所周知而且現有的XML解析器能為所有主流編程語言所用所以XML數據能被任何平台輕松使用
  Web網站聚合就是一種使用XML來共享數據的范例在新聞站點和網志中經常可以看到采用Web網站聚合技術網站能以XML格式的Web可訪問的聚合文件來發布最新內容網站使用的聚合格式有很多種其中最流行的一種格式就是RSS(RSS規范被發布在HarvardLaw網站的技術欄目上)此外MSDN雜志有一個聚合文件MSDN雜志本期刊物其中列出了最新一期MSDN雜志上的文章包括到在線版本文章的鏈接
  一旦Web站點有了公開發布聚合文件那麼不同的客戶端就可以消費它消費聚合文件的方式有很多種比如某個提供NET技術資源的站點可能希望在網站中添加最新的MSDN雜志文章標題聚合文件還常常被新聞聚合器程序所用這種程序被專門設計用來獲取和顯示不同來源的聚合文件
  隨著人們越來越注重使用XML數據在ASPNET頁面中處理XML數據的能力變得比以往更關鍵既然Web站點聚合如此重要本文我們就來創建一個Web站點聚合文件生成程序和一個在線新聞聚合器在建立這兩個微型程序的過程中我們將講述如何訪問和顯示XML數據不論這些數據是來自遠端的Web服務器還是本地的文件系統我們將演示如何多種不同的方法顯示XML數據比如用Repeater控件以及用ASPNETXMLWeb控件
  因為這只是一篇小文章不可能長篇大論我會假設讀者您熟悉XSLT和XPath如果您不熟悉建議在看這篇文章之前先訪問以下資源

  FAQ:WhatisXSLTandHowDoesitRelatetoXML
XSLTutorial
XPathTutorial
使用RSS規范的聚合內容
  本文我們將要創建的第一個微型程序是一個聚合文件生成器針對這個迷你程序假設你是一個大型新聞網站(如)的Web開發者所有的新聞內容都保存在MicrosoftSQLServer數據庫中具體地說這些文章是都保存在一個名為Articles的表中表中以下字段與我們的程序密切相關

  ArticleID—主鍵自增長的整型字段用來唯一標識每一篇文章
Title—指定標題字段數據類型varchar()
Author—指定作者字段數據類型varchar()
Description—新聞內容描述字段數據類型varchar()
DatePublished—新聞發布日期字段數據類型datetime
  請注意Articles表中可能還有其它字段上面所列的只是我們在創建聚合文件的時候所要用到的字段而且這只是一個非常簡單的數據模型在是應用的數據庫環境中你可能會使用更加標准化的數據庫模型比如具備一個單獨的authors(作者)表有一個建立作者和文章之間多對多關系的表等等
  下一步我們將創建一個ASPNET頁面用格式化好的RSSXML文件顯示一個最新的新聞列表在講述如何在ASPNET頁面中完成這種轉換之前我們要先介紹一下RSS規范的內容我們應該記住在整個規范中RSS是被設計用來為聚合內容提供一個數據模型那麼毫無疑問它會有一系列的XML元素用來描述Web站點要聚合的內容信息以及一系列用來描述某一特定新聞項的XML元素最後不要忘記RSS聚合文件是一個XML格式文件必須符合XML格式化的准則也就是

  所有XML元素必須正確嵌套
所有的屬性值要用引號包含起來
< >&符號要相應地替換為< >&和&apos;
  而且XML格式是大小寫敏感的這就意味著XML元素的起始和終止標簽必須匹配拼寫和大小寫都必須一致
  RSS的根元素是< rss>元素這個元素可以有一個版本號的屬性例如

  < rssversion=>

< /rss>

  < rss>元素只有一個子元素< channel>用來描述聚合的內容在< channel>元素裡面有三個必需的子元素用來描述Web站點的信息這三個元素是

  title—定義聚合文件的名稱一般來說還會包括Web站點的名稱
link—Web站點的URL
description—Web站點的一段簡短的描述
除此之外還有一些可選元素來描述站點信息這些元素的更多信息請參見RSS規范

  每一個新聞項目放在一個單獨的< item>元素中< channel>元素可以有任意數量的< item>元素每個< item>元素可以有多種的子元素唯一的要求是最少必須包含< title>元素和< description>元素其中一個作為子元素以下列出了一些相關的< item>子元素

  title—新聞項目的標題
link—新聞項目的URL
description—新聞項目的大綱;
author—新聞項目的作者;
pubDate—新聞項目的發布日期
  下面是一個非常簡單的RSS聚合文件你可以從RSSgeneratedbyRadioUserLand看到其他的RSS文件的例子

  < rssversion=>
< channel>
< title>LatesFAQs< /title>
< link>; /link>
< description>
ThisisthesyndicationfeedfortheFAQs
a
< /description>
< item>
< title>WorkingwiththeDataGrid< /title>
< link>x< /link>
< pubDate>MonJul::GMT< /pubDate>
< /item>
< item>
< title>WorkingwiththeRepeater< /title>
< description>
ThisarticleexamineshowtoworkwiththeRepeater
control
< /description>
< link>x< /link>
< pubDate>TueJul::GMT< /pubDate>
< /item>
< /channel>
< /rss>
  關於< pubDate>元素的格式有一點特別重要再此要講一下RSS要求日期必須按照RFC日期和時間規范進行格式化此格式要求開頭是一個可選的字母星期縮寫加一個逗號

  接著必須是日加上字母縮寫的月份和年份最後是一個帶時區名的時間另外要注意< description>子元素是可選的上述文件第一個新聞沒有< description>元素而第二個新聞就有一個

  通過ASPNET頁面輸出聚合內容
  現在我們已經知道了如何按照RSS規范存儲我們的新聞項我們已經就緒創建一個ASPNET頁面當用戶發出請求時就會返回網站聚合的內容更確切地說我們將建立一個名字叫rssaspx的ASPNET頁面這個頁面會按照RSS規范的格式返回Articles數據庫表中的最新的個新聞項
  可以有幾種方法來完成這件事稍後將會講到但是現在我們首先要完成一件事那就是先要從數據庫中獲得最新的個新聞項這可以用下面的SQL查詢語句獲得

  SELECTTOPArticleIDTitleAuthorDescriptionDatePublishedFROMArticlesORDERBYDatePublishedDESC
  獲得了這些信息以後我們需要把這些信息轉換成相應的RSS格式聚合文件要把數據庫的數據顯示為XML數據最簡單快速的方法就是使用Repeater控件准確地說Repeater控件將在HeaderTemplate和FooterTemplate模版裡顯示< rss>元素< channel>元素以及站點相關的元素標簽在ItemTemplate模版裡面顯示< item>元素下面是我們這個ASPNET頁面(aspx文件)的HTML部分

  < %@Pagelanguage=c#ContentType=text/xmlCodebehind=rssaspxcs
AutoEventWireup=falseInherits=SyndicationDemorss%>
< asp:Repeaterid=rptRSSrunat=server>
< HeaderTemplate>
< rssversion=>
< channel>
< title>ASPNETNews!< /title>
< li >


From:http://tw.wingwit.com/Article/program/net/201311/11860.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.