?????不管怎樣,它來(lái)了,你準(zhǔn)備好了嗎?
?????說(shuō)到Web2.0,就會(huì)提到Blog、TAG、SNS、RSS、wiki這些軟件應(yīng)用和xml、ajax等這些新理論和技術(shù)實(shí)現(xiàn)。
RSS毋容置疑就是其重要的應(yīng)用之一。
?????那么什么是RSS?它到底有什么用呢?
?????RSS是站點(diǎn)與站點(diǎn)之間共享內(nèi)容的一種簡(jiǎn)易方式(也稱為“聚合內(nèi)容”),通常被用于新聞和其他按順序排列的網(wǎng)站,例如Blog網(wǎng)站。網(wǎng)站提供RSS輸出,有利于讓用戶發(fā)現(xiàn)網(wǎng)站內(nèi)容的更新。網(wǎng)站用戶可以在客戶端借助于類似新聞資訊閱讀器等支持RSS的新聞聚合工具軟件,在不打開(kāi)網(wǎng)站內(nèi)容頁(yè)面的情況下閱讀支持RSS輸出的網(wǎng)站內(nèi)容。
?????RSS是基于XML的一種形式。并且所有的RSS文件都要遵守萬(wàn)維網(wǎng)聯(lián)盟(W3C)站點(diǎn)發(fā)布的XML 1.0規(guī)范。具體格式可以查一下RSS 2.0規(guī)范,這里就不再重復(fù)粘貼了。
下面是我總結(jié)的幾種RSS的技術(shù)實(shí)現(xiàn)代碼:
1.在線生成RSS聚合頁(yè)。
(1)創(chuàng)建Rss.aspx
<%@ Page language="c#" Codebehind="Rss.aspx.cs" AutoEventWireup="false" Inherits="LiTianPing.Rss" %>
只留下這一行,其余的都刪掉。
(2)后臺(tái)代碼;Rss.aspx.cs
??private void Page_Load(object sender, System.EventArgs e)
??{????
???Response.ContentType="text/xml";
???Response.Write(GetRSS());
??}
??/// <summary>
??/// 取得聚合文章
??/// </summary>
??/// <returns></returns>
??public string GetRSS()
??{
???News t=new News();//自己的業(yè)務(wù)類
???DataSet ds=t.GetListByClass(1);//根據(jù)類別得到數(shù)據(jù)
???
???StringBuilder strCode=new StringBuilder();
???strCode.Append("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>");
???strCode.Append("<rss version='2.0' xmlns:dc=\"http://purl.org/dc/elements/1.1/\"");
???strCode.Append(" xmlns:trackback=\"http://madskills.com/public/xml/rss/module/trackback/\" ");
???strCode.Append(" xmlns:wfw=\"http://wellformedweb.org/CommentAPI/\" xmlns:slash=\"http://purl.org/rss/1.0/modules/slash/\">");
???strCode.Append("<channel>");
???strCode.Append("<title>李天平RSSDemo</title>");
???strCode.Append("<link>http://"+Request.ServerVariables["SERVER_NAME"]+"</link> ");
???strCode.Append("<description>天道酬勤</description> ");??
???strCode.Append("<copyright>Copyright 2005</copyright> ");??????
???
???foreach(DataRow row in ds.Tables[0].Rows)
???{
????string Id=row["Id"].ToString();
????string title=row["title"].ToString();
????string description=row["description"].ToString();
????string pubdate=row["pubdate"].ToString();
????string ClassId=row["ClassId"].ToString();
????//string author=row["author"].ToString();
????strCode.Append("<item>");
????strCode.Append("<title>"+title+"</title>");
????strCode.Append("<link>http://"+Request.ServerVariables["SERVER_NAME"]+"/NewsShow.aspx?ID="+Id+"</link>");
????strCode.Append("<subject>"+description+"</subject>");
????strCode.Append("<description><![CDATA["+description+"]]></description>");????
????strCode.Append("<PubDate>"+pubdate+"</PubDate>");
????strCode.Append("<category>"+ClassId+"</category>");
????strCode.Append("</item>");????
???}
???strCode.Append("</channel>");
???strCode.Append("</rss>");??
???return strCode.ToString();
??}
?(3) XmlTextWriter實(shí)現(xiàn)方式2;Rss.aspx.cs
? string xmlDoc="rss.xml";?
?private void Page_Load(object sender, System.EventArgs e)
??{????
???xmlDoc=Server.MapPath(".")+xmlDoc;???
???GetRSS2();
???XmlDocument doc= new XmlDocument();
???doc.Load(xmlDoc);
???Response.ContentType = "text/xml";
???doc.Save(Response.Output);
??}
??/// <summary>
??/// 取得聚合文章
??/// </summary>
??/// <returns></returns>
??public void GetRSS2()
??{
???News t=new News();
???DataSet ds=t.GetListByClass(1);
???
???XmlTextWriter writer = new XmlTextWriter(xmlDoc,Encoding.UTF8);
???writer.Formatting = Formatting.Indented;
???writer.WriteStartDocument(true);
???writer.WriteComment("RSS頁(yè)的實(shí)現(xiàn)");
???writer.WriteStartElement("rss");
???writer.WriteAttributeString("version","2.0");??????
???writer.WriteStartElement("channel");???
???writer.WriteStartElement("title");
???writer.WriteString("李天平RSSDemo");
???writer.WriteEndElement();
???writer.WriteStartElement("link");???
???writer.WriteString("http://"+Request.ServerVariables["SERVER_NAME"]);
???writer.WriteEndElement();???
???writer.WriteStartElement("description");
???writer.WriteString("天道酬勤");
???writer.WriteEndElement();
???writer.WriteStartElement("copyright");
???writer.WriteString("Copyright 2005");
???writer.WriteEndElement();
???writer.WriteStartElement("language");
???writer.WriteString("zh-cn");
???writer.WriteEndElement();??
??????
???foreach(DataRow row in ds.Tables[0].Rows)
???{
????string Id=row["Id"].ToString();
????string title=row["title"].ToString();
????string description=row["description"].ToString();
????string pubdate=row["pubdate"].ToString();
????string ClassId=row["ClassId"].ToString();
????//string author=row["author"].ToString();
????writer.WriteStartElement("item");
????writer.WriteStartElement("title");
????writer.WriteString(title);
????writer.WriteEndElement();
????writer.WriteStartElement("link");
????writer.WriteString("http://"+Request.ServerVariables["SERVER_NAME"]+"/NewsShow.aspx?ID="+Id) ;
????writer.WriteEndElement();
????writer.WriteStartElement("description");
????writer.WriteCData(description);
????writer.WriteEndElement();
????writer.WriteStartElement("pubDate");
????writer.WriteString(pubdate);
????writer.WriteEndElement();
????writer.WriteStartElement("category");
????writer.WriteString(ClassId);
????writer.WriteEndElement();
????writer.WriteEndElement();??
???}
???writer.WriteEndElement();
???writer.WriteEndElement();
???writer.Flush();
???writer.Close();
?
??}
2.在線RSS閱讀獲取。
頁(yè)面代碼:
??<P style="FONT-SIZE: 11px">
???Feed種子:<asp:TextBox id="FeedUrl" runat="server" Width="440px"></asp:TextBox><BR>
???顯示條數(shù):<asp:TextBox id="Num" runat="server" Width="48px"></asp:TextBox></P>
??<P style="FONT-SIZE: 11px">
???<asp:Button id="GetFeed" runat="server" Text="獲得RSS"></asp:Button><BR>
???<BR>
???<asp:Label id="RssFeed" runat="server"></asp:Label></P>
后臺(tái)代碼:
??/// <summary>
??/// 獲得要顯示的Feed種子數(shù)據(jù)
??/// </summary>
??/// <param name="RssUrl"></param>
??/// <param name="showNewsCount"></param>
??/// <returns></returns>
??public string LoadRSS(string RssUrl, int showNewsCount)
??{
???string strRssList = "";
???string strMsg;
???try
???{??????
????XmlDocument objXMLDoc = new XmlDocument();???
????objXMLDoc.Load(RssUrl);??
????XmlNodeList objItems = objXMLDoc.GetElementsByTagName("item");????
??
????if(showNewsCount > 30)
?????showNewsCount = 10;??
????if(showNewsCount < 1)
?????showNewsCount = objItems.Count;
??
????string title="";
????string link="";?
????int i;
????if(objXMLDoc.HasChildNodes == true)
????{
?????i = 1;
??? ????foreach(XmlNode objNode in objItems)
?????{
??????if(i<=showNewsCount)
??????{
???????if(objNode.HasChildNodes == true)
???????{
????????XmlNodeList objItemsChild = objNode.ChildNodes;
????????foreach(XmlNode objNodeChild in objItemsChild)
????????{
?????????switch(objNodeChild.Name)
?????????{
??????????case "title":
???????????title = objNodeChild.InnerText;
???????????break;
??????????case "link":
???????????link = objNodeChild.InnerText;
???????????break;??????????
?????????}?????????
????????}
????????i = i+1;
????????strRssList += "<a href=" + link +" target=_blank>" + title + "</a><br>";?
???????}??????
??????}
?????}???????
????}
????strMsg = strRssList;
???}
???catch
???{
????strMsg = "RSS Feed 源數(shù)據(jù)出錯(cuò)!";
???}
???return strMsg;
??}
??//獲取按鈕,獲取指定RSS
??private void GetFeed_Click(object sender, System.EventArgs e)
??{
???if(FeedUrl.Text == "")//RSS地址
???{
????RssFeed.Text = "信息源不能為空,您可刷新重試或聯(lián)系管理員!";
????return ;
???}??
???RssFeed.Text = LoadRSS(FeedUrl.Text,Convert.ToInt32(Num.Text)); //獲取指定數(shù)目?
??}
3.無(wú)刷新動(dòng)態(tài)更新的在線RSS閱讀獲取
<%@ Page language="c#" Codebehind="XmlHttp.aspx.cs" AutoEventWireup="false" Inherits="LiTianPing.XmlHttp" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
?<HEAD>
??<title>XmlHttp</title>
??<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
??<meta name="CODE_LANGUAGE" Content="C#">
??<meta name="vs_defaultClientScript" content="JavaScript">
??<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
??<style>td { font-size: 9pt}
??</style>
??<script>
??<!--?
??var oDiv
??var xh? ??
??function getXML()
??{???
???xh =new ActiveXObject("Microsoft.XMLHTTP");
???oDiv = document.getElementById("rssitem");
???oDiv.style.display= "";
???try
???{
????//如果是本地改成下面語(yǔ)句直接讀取
????//xh.open("GET","/Rss.aspx",false);????
????xh.open("GET","Http://ltp.cnblogs.com/Rss.aspx",false);
????xh.send(null);
????loadData(xh,oDiv);
???}
???catch(e)
???{
????error(oDiv);
???}
??}
??function loadData(xh,oDiv)
??{
???if (xh.readyState == 4)
???{
????xml = xh.responsexml;
????var i;
????var nodes = xml.selectNodes("/rss/channel/item");
????var bloglink = xml.selectSingleNode("/rss/channel/link").text;
????oDiv.innerHTML = "";
????var html;????
????for(i=0;i<nodes.length;i++)
????{????
????????
??????html += "<div >";
??????html += "??? <div >";
??????html += "??????? <a class=font1 href='" +nodes[i].selectSingleNode("link").text + "' target='_blank'>" + nodes[i].selectSingleNode("title").text +"</a><BR><BR>";
??????html += "??? </div>";
??????html += "??? <div >";
??????html += "??????? " +nodes[i].selectSingleNode("description").text;
??????html += "??? </div>"???????????
??????//html += "??? </div>";
??????html += "</div><hr>";
????}
????oDiv.innerHTML = html;
???}
???else
???{
????error(oDiv);
???}
??}
??function error(oDiv)
??{
???oDiv.innerHTML = "載入失敗";
??}
??-->
??</script>
?</HEAD>
?<body MS_POSITIONING="GridLayout" onload="window.setTimeout('getXML()',200);">
??<form id="Form1" method="post" runat="server">
???<div align=center>
???<table cellpadding="0" cellspacing="0" border="0" width="80%">
????<tr>
?????<td>
??????<div id="rssitem" style="WIDTH:80%">數(shù)據(jù)載入中...</div>
?????</td>
????</tr>
???</table>
???</div>
??</form>
?</body>
</HTML>