標籤:
RSS全稱Really Simple Syndication。一些更新頻率較高的網站可以通過RSS讓訂閱者快速擷取更新資訊。RSS文檔需遵守XML規範的,其中必需包含標題、連結、描述資訊,還可以包含發布時間、最後更新時間等資訊。
本文將介紹通過LINQ to XML產生XML文檔,並在ASP.NET MVC Web應用程式中輸出。
在產生RSS文檔前,先簡單瞭解一下RSS的結構。根節點rss下有channel節點,channel節點的一些子節點(title,link,description)包含了該RSS的部分描述資訊。channel下可包含多個item節點用來表示多個內容資訊,如部落格中的文章、論壇中的文章。
代碼 1 <rss version="2.0">
2 <channel>
3 <title>channel標題</title>
4 <link>網頁地址</link>
5 <description>channel描述</description>
6 <item>
7 <title>內容1標題</title>
8 <description>內容1描述</description>
9 <link>內容1連結</link>
10 </item>
11 <item>
12 <title>內容2標題</title>
13 <description>內容2描述</description>
14 <link>內容2連結</link> </item>
15 </channel>
16 </rss>
1. 用LINQ to XML產生類似上述的文檔。
1.1 建立一個XDocument,添加根節點和相關屬性描述。
代碼1 XDocument doc = new XDocument(
2 new XDeclaration("1.0", "utf-8", "yes"), // XML文檔聲明
3 new XElement("rss", // 根節點
4 new XAttribute("version", "2.0"), // rss節點的屬性
5 new XElement(channel // rss的子節點channel
6 ))); )));
1.2 處理channel節點和它的相關描述。
代碼1 XElement channel = new XElement("channel"); // channel節點
2 channel.Add(new XElement[]{
3 new XElement("title","Test"), // channel標題
4 new XElement("link","http://localhost"), // 頁面連結
5 new XElement("description","Test RSS") // channel描述
6 });
1.3 往channel節點增加內容資訊,rssFeedList是 List<RssFeed>類型的。由於item數量不固定,這裡用了foreach將list中的每一個內容資訊都加到channel。
代碼 1 foreach (var rssFeed in rssFeedList) // 對rssFeed集合中的每個元素進行處理
2 {
3 XElement item = new XElement("item", new XElement[]{ // 產生一個新的item節點
4 new XElement("title",rssFeed.Title), // 為新的item節點添加子節點
5 new XElement("description",rssFeed.Description),
6 new XElement("link",rssFeed.Link),
7 new XElement("pubDate",rssFeed.PublishDate)
8 });
9 channel.Add(item); // 將新的item節點添加到channel中
10 }
2. 建立RssFeedResult類
我們寫一個RssFeedResult類,繼承自ActionResult,以便在ASP.NET MVC的controller中返回RSS。關於這部分內容可參考之前的一篇文章《讓ASP.NET MVC頁面返回不同類型的內容》。
代碼 1 public class RssFeedResult : ActionResult
2 {
3 List<RssFeed> Data { get; set; }
4
5 public RssFeedResult(List<RssFeed> data)
6 {
7 Data = data;
8 }
9
10 public override void ExecuteResult(ControllerContext context)
11 {
12 if (context == null)
13 {
14 throw new ArgumentNullException("context");
15 }
16
17 HttpResponseBase response = context.HttpContext.Response;
18 response.ContentType = "text/xml"; // 設定HTTP頭中的ContentType
19 XDocument result= RssFeedHelper.GetRssFeed(Data); // 擷取XML資料
20 response.Write(result.ToString()); // 將XML資料寫入response中
21 }
22 }
3. 在controller中使用
我們只要在controller中調用RssFeedResult(rssFeedList)方法即可返回RSS頁面了。
public RssFeedResult Rss()
{
// 添加2個測試用的資料
RssFeed r1 = new RssFeed { Description = "Test1", Link = "http://localhost/1", Title = "Test1", PublishDate = DateTime.Now };
RssFeed r2 = new RssFeed { Description = "Test2", Link = "http://localhost/2", Title = "Test2", PublishDate = DateTime.Now };
List<RssFeed> rssFeedList = new List<RssFeed>();
rssFeedList.Add(r1);
rssFeedList.Add(r2);
// 返回RSS
return new RssFeedResult(rssFeedList);
}
樣本下載 (Visual Studio 2010)
在 ASP.NET MVC Web 應用程式中輸出 RSS Feeds