最近跟着公司在開發一個新聞系統,經理說可能要對新聞分類顯示RSS資訊,以便讀者訂閱,讓讀者及時知道最新的新聞.這不,今天就研究了一天關于RSS的東西.整的頭又點暈(哎,菜鳥就是菜鳥,沒想法 - -#).
先說說有關怎麼生成一個RSS文檔吧.我就針對我這裡的這個小例子來說,這個小例子模仿的是一個教育新聞類(資料都是靜态的,實際應用中是要從資料庫裡讀取新聞記錄的,這裡是友善舉例,是以就這麼做了).先看看HTML代碼吧.Default.aspx頁面的HTML代碼如下:

<% ... @ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > 無标題頁 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< fieldset >
< legend > 教育新聞 < input type ="button" value ="RSS" onclick ="getRSS()" /></ legend >
< p >< a href ="NewsView.aspx" > aaaaaaaaaaaaaaaaaaaaaaa </ a ></ p >
< p >< a href ="NewsView.aspx" > bbbbbbbbbbbbbbbbbbbbbbbbb </ a ></ p >
< p >< a href ="NewsView.aspx" > ccccccccccccccccccccccccc </ a ></ p >
< p >< a href ="NewsView.aspx" > dddddd </ a ></ p >
</ fieldset >
</ div >
</ form >

< script > ...
function getRSS()
...{
var news = document.getElementsByTagName('a');//得到<a>标簽數組,總共有4個<a>标簽,是以news.length為4
var titles='';
for(var i=0;i<news.length;i++)
...{
titles+=news[i].innerText+'|';//把每條新聞的标題整合成一個數組,這裡得到的結果是形如:aaaaaaaaaaaaaaaa|bbbbbbbbbb|ccccccccccccc|
}
//alert(titles);
var today = new Date();//取系統目前時間
window.open('rss.aspx?titles='+titles+'&pubDate='+today.toGMTString());//将新聞标題整合成的數組以及目前時間的GMT格式傳遞給rss.aspx頁面
}
</ script >
</ body >
</ html >
HTML代碼其實很簡單,有4條新聞,還有一個按鈕,其onclick事件調用JS函數getRSS(),這個函數主要就是生成一些必要的參數,然後傳遞給一個叫rss.aspx的頁面.rss.aspx頁面就是用來生成RSS文檔的.RSS頁面的的HTML代碼隻有一行.

<% ... @ Page Language="C#" AutoEventWireup="true" CodeFile="rss.aspx.cs" Inherits="rss" %>
rss.aspx.cs頁面代碼如下:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
public partial class rss : System.Web.UI.Page

... {
protected void Page_Load(object sender, EventArgs e)
...{
string titles = Request.QueryString["titles"].ToString();//擷取傳遞過來的參數
//string titles = "aaaaaaaaaaaaaaaaaaaa|bbbbbbbbbbbbbbbbbbbbb|ccccccccccccccccc|ddddd|";
titles = titles.Remove(titles.LastIndexOf('|'));//移除最後的一條'|'線
string[] list = titles.Split('|');//按'|'把字元串劃分成一個數組,這裡生成的數組有4個元素,list[0]=aaaaaaaaa,list[1]=bbbbbbb,list[2]=cccccccccccc,list[3]=ddddd
string pubDate = Request.QueryString["pubDate"].ToString();//擷取傳遞過來的參數
StringBuilder rss = new StringBuilder();
rss.Append("<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">");//rss文檔必須的标簽
rss.Append("<channel>");//RSS文檔必須的标簽
rss.Append("<title>教育新聞</title>");//RSS文檔必須的标簽
rss.Append("<link />");//RSS文檔必須的标簽
rss.Append("<description>貴州教育網的教育新聞</description>");//RSS文檔必須的标簽
rss.Append("<dc:language>zh-CHS</dc:language>");//可選的标簽
rss.Append("<generator>RSS Create By ASP.NET</generator>");//可選的标簽
for (int i = 0; i < list.Length;i++ )
...{
rss.Append("<item>");//RSS文檔必須的标簽
rss.Append("<dc:creator>Xiao Jun</dc:creator>");//可選标簽
rss.Append("<title>"+list[i]+"</title>");//必須的标簽
rss.Append("<link>NewsView.aspx?NewsID="+i+"</link>");//必須的标簽
rss.Append("<pubDate>"+pubDate+"</pubDate>");//可選的标簽
rss.Append("<guid>NewsView.aspx?NewsID=" + i + "</guid>");//可選的标簽
rss.Append("<description>這是第" + i + "條新聞</description>");//這個标簽最好要有
rss.Append("</item>");//<item>的結束标簽
}
rss.Append("</channel>");//<channel>的結束标簽
rss.Append("</rss>");//<rss>的結束标簽
Response.Clear();//晴空response中的内容
Response.ContentType = "text/xml";//設定内容的MIME類型為XML檔案,因為RSS文檔其實也是一個XML文檔
Response.Write(rss);//輸出RSS
}
}
生成的RSS文檔如下:
- < rss version ="2.0" xmlns:dc ="http://purl.org/dc/elements/1.1/" xmlns:trackback ="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw ="http://wellformedweb.org/CommentAPI/" xmlns:slash ="http://purl.org/rss/1.0/modules/slash/" >
- < channel >
< title > 教育新聞 </ title >
< link />
< description > 貴州教育網的教育新聞 </ description >
< dc:language > zh-CHS </ dc:language >
< generator > RSS Create By ASP.NET </ generator >
- < item >
< dc:creator > Xiao Jun </ dc:creator >
< title > aaaaaaaaaaaaaaaaaaaaaaa </ title >
< link > NewsView.aspx?NewsID=0 </ link >
< pubDate > Wed, 15 Aug 2007 14:35:23 UTC </ pubDate >
< guid > NewsView.aspx?NewsID=0 </ guid >
< description > 這是第0條新聞 </ description >
</ item >
- < item >
< dc:creator > Xiao Jun </ dc:creator >
< title > bbbbbbbbbbbbbbbbbbbbbbbbb </ title >
< link > NewsView.aspx?NewsID=1 </ link >
< pubDate > Wed, 15 Aug 2007 14:35:23 UTC </ pubDate >
< guid > NewsView.aspx?NewsID=1 </ guid >
< description > 這是第1條新聞 </ description >
</ item >
- < item >
< dc:creator > Xiao Jun </ dc:creator >
< title > ccccccccccccccccccccccccc </ title >
< link > NewsView.aspx?NewsID=2 </ link >
< pubDate > Wed, 15 Aug 2007 14:35:23 UTC </ pubDate >
< guid > NewsView.aspx?NewsID=2 </ guid >
< description > 這是第2條新聞 </ description >
</ item >
- < item >
< dc:creator > Xiao Jun </ dc:creator >
< title > dddddd </ title >
< link > NewsView.aspx?NewsID=3 </ link >
< pubDate > Wed, 15 Aug 2007 14:35:23 UTC </ pubDate >
< guid > NewsView.aspx?NewsID=3 </ guid >
< description > 這是第3條新聞 </ description >
</ item >
</ channel >
</ rss >
這隻是一個簡單的小例子,具體功能可以自行擴充,RSS文檔生成好了,下面的工作就是要寫一個RSS閱讀器了.有關RSS閱讀器的文章,請關注我的BLOG,可能會在以後的幾天裡把有關RSS閱讀器的東東寫出來給大家分享,我也不懂,在研究幾天.呵呵~~