下午坐著沒事做,看著最近很流行的那些Rss訂閱 感覺蠻好玩的 就索性把學院網站也搞個Rss訂閱通道 以方面師生及時的瞭解校園最新動向,以及各部門網站的相關資訊,然後就開始了第一個Rss開發。
RSS(Really Simple Syndication,真正簡單的連鎖)是一種 Web 內容連鎖格式。RSS 成為通過 Web 連鎖新聞內容的標準格式。剛好我現在vs的環境也是.net,因為在.NET3.5下,MS整合了RSS對象。這樣一改變,就很大的方便了建立和讀取RSS了。
首先搞了個Rss.aspx頁面,在Page_Load方法裡面顯示讓它以標準的xml格式輸出
Response.Cache.SetNoStore();
Response.ContentType = "application/xml";
然後根據需要訂閱的頁面傳過來的參數進行一番判斷。把所有合格資源都放在DataTable裡面。
接著用MemoryStream對象對xml進行操作,就不多說了,看了代碼就會明白,同時也給自己做個備忘。如下:
MemoryStream ms = new MemoryStream();
XmlTextWriter xmlTW = new XmlTextWriter(ms, Encoding.UTF8);
xmlTW.Formatting = Formatting.Indented;
xmlTW.WriteStartDocument();
xmlTW.WriteStartElement("rss");
xmlTW.WriteAttributeString("version", "2.0");
xmlTW.WriteStartElement("channel");
if (WebID == 0)
{
}
else
{
xmlTW.WriteElementString("title", "歡迎訂閱"+WebDs.Tables[0].Rows[0]["Web_Name"].ToString()+">>"+ColumnDs.Tables[0].Rows[0]["ColumnName"].ToString());
xmlTW.WriteElementString("link", ColumnDs.Tables[0].Rows[0]["CoulumnUrl"].ToString());
xmlTW.WriteElementString("description", "");
}
DataTable dt = ds.Tables[0];
foreach (DataRow dr in dt.Rows)
{
xmlTW.WriteStartElement("item");
xmlTW.WriteElementString("title", dr["Article_Title"].ToString());
xmlTW.WriteElementString("link", GetNewsLink(dr));
xmlTW.WriteElementString("pubDate",string.Format("{0:R}",dr["CreateTime"]));
xmlTW.WriteElementString("author", dr["UserLogin_FullName"].ToString());
xmlTW.WriteElementString("description", Pub_Config.nohtml(Pub_Config.Substrin(dr["Article_Body"], 400)));
xmlTW.WriteEndElement();
}
xmlTW.WriteEndElement();
xmlTW.WriteEndElement();
xmlTW.WriteEndDocument();
xmlTW.Flush();
byte[] buffer = ms.ToArray();
Response.Write(Encoding.UTF8.GetString(buffer));
Response.End();
xmlTW.Close();
ms.Close();
ms.Dispose();
要注意的是:
1.XML格式是大小寫敏感的,這就意味著,XML元素的起始和終止標籤必須匹配,拼字和大小寫都必須一致。
2.RSS2.0的根項目是< rss>元素,這個元素可以有一個版本號碼的屬性,例如:
< rssversion="2.0">
...
< /rss>
< rss>元素只有一個子項目< channel>,用來描述彙總的內容。在< channel>元素裡面有三個必需的子項目,用來描述Web網站的資訊。這三個元素是:
title—定義彙總檔案的名稱,一般來說,還會包括Web網站的名稱;
link—Web網站的URL;
description—Web網站的一段簡短的描述。
除此之外,還有一些可選元素來描述網站資訊。這些元素的更多資訊請參見RSS2.0規範。
每一個新聞項目放在一個單獨的< item>元素中。< channel>元素可以有任意數量的< item>元素。每個< item>元素可以有多種的子項目,唯一的要求是最少必須包含< title>元素和< description>元素其中一個作為子項目。以下列出了一些相關的< item>子項目:
title—新聞項目的標題;
link—新聞項目的URL;
description—新聞項目的大綱;
author—新聞項目的作者;
pubDate—新聞項目的發布日期
3.< item>子項目尤其要注意的是pubDate的格式,RSS要求日期必須按照RFC822日期和時間規範進行格式化,此格式要求:開頭是一個可選的3字母星期縮寫加一個逗號,
.
接著必須是日加上3字母縮寫的月份和年份,最後是一個帶時區名的時間。
我們可以用Stirng.foemat()來轉化如期格式,就如我上面那個例子。
最終結果: