最近准备给自己的网站做个RSS。发现网络搜索的几个网站制作起来感觉不太方便!feed43用着看不大懂。所以还是自己制作一个RSS吧。听说不就是生成XML吗。不过需要RSS的格式。
大家可以去看看我的RSS:http://feed.ok22.org(昨天才完成的呢),
好吧!接下来我就把实例写下来:
使用Repeter控件开发RssFeed
以前绑定数据都是用DataList,而不用Repeter。因为DataList 可以可视化布局和绑定数据项,使用比Repeter方便,且方便很多,开发效率高。而DataList和Repeter在性能方面几乎是等同的(Repeter稍微好那么一点点)。DataList绑定数据在浏览器中显示时会生成Html表格,而Repeter不会,因而用Repeter控件绑定数据在控制样式时会比DataList繁琐些,要手动编写Html代码和绑定表达式。两者一折中我们自然首选DataList ,甚至网上有人说要放弃 Repeter 。
任何事情都是两面的——Repeter也不能例外(科学中蕴含着哲学)。正因为Repeter的这一不会生成Html代码的个性,也就是说它的自定义性很强,高度自定义,可以说是所有数据控件里最强的(当然使用起来相对而言是罪最烦的),这便使得它有了另一个用途,就是我下面要讲的——用Repeter控件开发RssFeed ,只要几十行代码。
我载过网上一个人写的RssFeed源码,写的很好,可以编译成程序集重用,但写得很烦,大概写了几十个类,体积有 1MB之多,哈哈,我想不就是一个Rss提供程序嘛?说白了不就是要动态地生成一个XML文件嘛?有必要这么小题大做嘛?我们可以使用Repeter来实现我们要的效果。
对了,在介绍怎样用Repeter控件开发RssFeed之前 ,先介绍一下Rss的规范。Rss不是一个随便的xml文件,随便起来就不是Rss了,它是要严格遵循一定的规范的:
RSS是两级结构的,第一级结构是channel,相当于 blog系统中某人的blog,在这一级中必须有title ,link description 三个必选属性。第二级结构是item,相当于 blog中的文章。这一级属性中最重要的是title,description和link l其中title是标题,description是介绍,link是与其相关的url 还有其他的一些可选属性,具体的请自行百度一下。 下面看一个简单而典型的Rss结构:
见Rss.xml
下面正式介绍怎样使用Repeter控件开发RssFeed。很简单,一共四步。
第一步,设计数据库,为了简单我就用Access,建一个库叫RssFeed.mdb ,然后建一个表叫RssItems ,这个表用来存储Rss第二级结构,即 item 里的内容,例如下面这样:
第二步,添加一个xml文件,赐它一个名字 Rss.xml 。
第三步,打理前台:
添加一个web页面叫RssTool.aspx ,然后在其上拖一个Repeter控件,修改ID为 RptRss ,切换到源视图给Repeter控件添加绑定表示,并删掉页面自动生成的一些Html代码,使之成为下面这个样子:
见RssTool.aspx 。
修改之后,VS会报出很多警告,甭管它,我们就要这样,这就是我们要的效果!
第四步,编写代码:
在RssTool.aspx.cs 文件里编写三个方法,全部代码如下:
见RssTool.aspx.cs
第五步,运行!
为了让你的RssFeed能提供更多的信息,例如pubDate 、author 甚至 image, 你只要在Repeater里绑定更多的项即可,前提是你必须在数据表里提供这样的字段。
RssTool.aspx代码如下
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="RssTool.aspx.cs" Inherits="RssTool" %>
<asp:Repeater id="RptRss" runat="server">
<HeaderTemplate>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0">
<channel>
<title>幸凡学习网</title>
<description>是一个免费提供代码分享的一个网站,专注于.net、SEO、Div+css、javascript、SEO、经典电影,免费视频教程,欢迎光临</description>
<language>zh_CN</language>
<link>http://www.ok22.org</link>
<image>http://www.ok22.org/images/logo.png</image>
<author>幸凡</author>
</HeaderTemplate>
<ItemTemplate>
<item>
<title><%# FormatString(DataBinder.Eval(Container.DataItem, "title"))%></title>
<description>
<![CDATA[ <%# FormatString(DataBinder.Eval(Container.DataItem,"description"))%>]]>
</description>
<link> <%# FormatString(DataBinder.Eval(Container.DataItem, "link"))%> </link>
</item>
</ItemTemplate>
<FooterTemplate>
</channel>
</rss>
</FooterTemplate>
</asp:Repeater>
RssTool.aspx.cs代码如下
using System;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Web.UI;
public partial class RssTool : System.Web.UI.Page
{
//在页面初始化时就绑定数据,不要等到Page_Load,否则会在跳转的一瞬间出现RssTool.aspx页面
protected void Page_Init(object sender, EventArgs e)
{
BindRss();
}
protected void BindRss() //给Repeter绑定数据
{
OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString + Server.MapPath(ConfigurationManager.ConnectionStrings["conn1"].ConnectionString));
OleDbDataAdapter oda = new OleDbDataAdapter("select * from RssItems order by ID", con);
DataTable dt = new DataTable();
oda.Fill(dt);
//DataTable dt = new Bll.artmanager().art_all();//本人3层结构绑定代码
//this.RptRss.DataSource = dt.DefaultView;//本人3层结构绑定代码
//this.RptRss.DataBind();//本人3层结构绑定代
this.RptRss.DataSource = dt;
this.RptRss.DataBind();
}
protected string FormatString(object Input)//替换一些xml中不能直接使用的字符,你可以写得更详细点
{
string Data = Input.ToString();
Data = Data.Replace("<", "<");
Data = Data.Replace(">", ">");
Data = Data.Replace("&", "&");
Data = Data.Replace("/", """);
Data = Data.Replace("'", "&qapos;");
return Data;
}
protected override void Render(HtmlTextWriter output) //重写Render方法,向Rss.xml文件写入内容
{
StringWriter SW;
HtmlTextWriter HTW;
SW = new StringWriter();
HTW = new HtmlTextWriter(SW);
base.Render(HTW);
String Temp = SW.ToString();
StreamWriter SWriter = File.CreateText(Server.MapPath("Rss.xml"));
SWriter.Write(Temp);
SWriter.Close();
output.Write(Temp);
Response.Redirect("Rss.xml");//这一行的目的是使用户点击了Rss图标就立即转向Rss.xml,因为要的就是这个xml页面。如果没有这一句,呈现给你的是一张乱糟糟的aspx页面,即RssTool.aspx,当然这个页面已经完全实现了RssFeed的功能,如果你不在意页面的丑陋,这个方法都没有必要重写,只要上面两个方法就够了
}
}
.net RssFeed制作实例下载
最后就是通过飞递注册个用户,提交你RSS的地址。具体操作方式可以看用feedsky生成优化博客的RSS