网页前端设计

http://www.86y.org
feedskyQQ邮箱

搜索文章

.net rss制作实例附下载

用声音读出全文关注我吧
 2012/8/29 13:34:53 阅读次数:3256

最近准备给自己的网站做个RSS。发现网络搜索的几个网站制作起来感觉不太方便!feed43用着看不大懂。所以还是自己制作一个RSS吧。听说不就是生成XML吗。不过需要RSS的格式。
大家可以去看看我的RSS:http://feed.ok22.org(昨天才完成的呢),

好吧!接下来我就把实例写下来:

rss

使用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 里的内容,例如下面这样:

repeat表

第二步,添加一个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


大家有什么问题或技术上的想法可以在此与大家分享,也可以加入前端爱好者QQ群(141999928)一起学习进步:【幸凡前端技术交流群】
0

如果您觉得本文的内容对您的学习有所帮助,捐赠与共勉,支付宝(左)或微信(右)

阅读全文内容关闭