以下是借鉴MSND的http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/aspnet-createrssw-aspnet.asp
这篇文章。
本文不会讲解什么是Rss Feed、它的用途、形式,结构。假如你还不太清楚,请到相关网站查看。
我想说的是用Repeater控件来创建自己的Rss聚合。
1.首先建立一个简单的数据库,数据库的建立表格如下:
![](https://xucanzhao.cnblogs.com/images/cnblogs_com/xucanzhao/Rss.gif)
建立表之后,在里面随便添加点记录,DatePublished最好把默认值设置成为Getdate()。当然也可以通过代码添加到数据库中。反正添加数据进去就可以了。
2.在vs.net中建立一个Rss.aspx文件(规范是这样的),把设计试图转向html试图。贴入以下代码:
1
<%@ Page language="c#" ContentType="text/xml" Codebehind="rss.aspx.cs" AutoEventWireup="false" Inherits="SyndicationDemo.rss" %>
2
<asp:Repeater id="rptRSS" runat="server">
3
<HeaderTemplate>
4
<rss version="2.0">
5
<channel>
6
<title>互动力工作室</title>
7
<link>http://www.cbxy.com/hdl/</link>
8
<description>
9
小钊的乱涂乱画,拿出去枪毙!
10
</description>
11
</HeaderTemplate>
12
13
<ItemTemplate>
14
<item>
15
<title><%# FormatForXML(DataBinder.Eval(Container.DataItem, "Title")) %></title>
16
<description><%# FormatForXML(DataBinder.Eval(Container.DataItem, "Description")) %></description>
17
<link>http://www.cbxy.com/hdl.aspx?ID=<%# DataBinder.Eval(Container.DataItem, "ArticleID") %></link>
18
<author><![CDATA[ <%# FormatForXML(DataBinder.Eval(Container.DataItem, "Author")) %>]]></author>
19
<pubDate><%# String.Format("{0:R}", DataBinder.Eval(Container.DataItem, "DatePublished")) %></pubDate>
20
</item>
21
</ItemTemplate>
22
23
<FooterTemplate>
24
</channel>
25
</rss>
26
</FooterTemplate>
27
</asp:Repeater>
28
注意第一行还是保留自己的原代码,其他的可以先复制。 ![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/None.gif)
10
![](/Images/OutliningIndicators/None.gif)
11
![](/Images/OutliningIndicators/None.gif)
12
![](/Images/OutliningIndicators/None.gif)
13
![](/Images/OutliningIndicators/None.gif)
14
![](/Images/OutliningIndicators/None.gif)
15
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
16
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
17
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
18
![](/Images/OutliningIndicators/None.gif)
19
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
20
![](/Images/OutliningIndicators/None.gif)
21
![](/Images/OutliningIndicators/None.gif)
22
![](/Images/OutliningIndicators/None.gif)
23
![](/Images/OutliningIndicators/None.gif)
24
![](/Images/OutliningIndicators/None.gif)
25
![](/Images/OutliningIndicators/None.gif)
26
![](/Images/OutliningIndicators/None.gif)
27
![](/Images/OutliningIndicators/None.gif)
28
![](/Images/OutliningIndicators/None.gif)
里面有几个可能还有点不明白的,比如18行的<![CDATA[这是xml的DTD的相关知识,如果不知道可以查看
xml中DTD语法知识,它在这里的主用主要是格式化html。在代码中存在FormatForXML,这个是在后台代码中的一个函数,等一下会讲到为什么要用这个函数。其他的地方我想有点经验的人都看得懂。我也不再罗嗦了。
至于一些hmtl中<html><head>到哪里去了,我也不在此多说了,因为订阅rss的时候是不会用到这些tag的。
3.写完这些代码之后假如想切换到设计试图,但是是行不通的,这个时候要直接切换到"查看代码"。
![](/images/cnblogs_com/xucanzhao/code.gif)
从上面图示切换到察看代码。
4.呵呵,现在只要绑定Repeater控件就可以。在page_load中绑定,我相信这一步还是比较简单的。我这里选前5个最新title(也就是top 5 order by DatePublished DESC 了),也可以根据自己的需要选择多少个
1
private void Page_Load(object sender, System.EventArgs e)
2
{
3
// Connect to the Database
4
SqlConnection myConnection = new SqlConnection("Server=<Server Name>;DataBase=<DataBase Name>;User id=sa;password=;");
5
6
// Retrieve the SQL query results and bind it to the Repeater
7
const string SQL_QUERY = "SELECT TOP 5 ArticleID, Title, Author, Description, DatePublished FROM Articles ORDER BY DatePublished DESC";
8
SqlCommand myCommand = new SqlCommand(SQL_QUERY, myConnection);
9
10
myConnection.Open();
11
rptRSS.DataSource = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
12
rptRSS.DataBind();
13
myConnection.Close();
14
}
修改一下链接字符串,SQL语句也是想当的简单,这时rtpRSS(Repeater的ID号)就绑定到数据库了。![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
5.最后一步了,就是先前所说的FormateForXML()这个函数,先看看代码
1
protected string FormatForXML(object input)
2
{
3
string data = input.ToString(); // cast the input to a string
4![](/Images/OutliningIndicators/InBlock.gif)
5
// replace those characters disallowed in XML documents
6
data = data.Replace("&", "&");
7
data = data.Replace("\"", """);
8
data = data.Replace("'", "'");
9
data = data.Replace("<", "<");
10
data = data.Replace(">", ">");
11![](/Images/OutliningIndicators/InBlock.gif)
12
return data;
13
}
他的作用主要是格式化字符串,把一些字符转换成符合xml规定的字符,比如“&”,在xml当中要以“&“这种形式显示才是正确的方法,假如是"&",它就会变成运算符了。![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
好了,全部的创建rss的代码写完了,这些只是基本的东西,假如想得到了解更多的知识,建议看看xml的相关书籍。
上面的代码由于是绑定到Repeater创建rss,所以效率不是很高。
过一段时间我会把我的用StringBuilder创建rss整理一下,放到blog上面,这种方法要比Repeater快。