揭秘RSS(上)——在ASP.net下用C#输出RSS链接

编程爱好者

前言:RSS的应用在网上已经日渐丰富,从博客采集到新闻阅读(如电脑报第8期G3版介绍的飞火流星软件),不少用户已经亲身体验了它带来的好处。但RSS到底是什么?如何在自己的程序中轻松地加入RSS的链接呢?为了让大家迅速了解这门技术,并将它应用到自己的软件作品中,让我们用这篇短文为大家揭秘RSS,引领读者入门。

一、什么是RSS

RSS是Really Simple Syndication的缩写,它是站点用于共享新闻和其他Web内容进行数据交换的一种简易方式,也叫聚合内容。它是由Netscape的新闻频道发展而来,经过了多年的演变,并随着Blog(博客)的兴起得到了很大的发展,现已形成三套标准。其好处在于能让别人更容易发现你对站点的更新,用户可以在不打开网站页面的情况下使用RSS的阅读器来浏览网站内容。

以上看起来挺复杂,但说白了RSS也很简单,它就是按照一定的数据格式把我们网站的内容告诉给别人。从某种意义上来讲,这种格式就是一种特殊的XML文件,当然在0.92、1.0、2.0三种标准中格式上有些不同。下面就让我们一起来用C#实现一个简单实用的、能同时支持0.92、1.0、2.0三种标准的RSS数据输出。

二、制作思路

在一个RSS的输出中可以包含多条数据,每条数据描述一个完整的内容。一般来讲,我们至少需要描述的内容包括主题、摘要、日期、作者、内容、链接。如果需要输出更多的内容,可以参考RSS的具体规范,我们下面的例子就暂定为以上6项内容。

那么是如何实现的呢?大致可以分为三个步骤。我们可以首先用C#在ASP.net下定义一个包含上述6项内容的结构,用这个结构中的6个字符串分别存储未来要输出的RSS信息中的6项内容。

然后按照协议标准生成一个符合RSS20的XML文档,并将它存放在一个临时文件中。最后我们为这个XML文档添加具体的信息,然后在ASP.net下用一句Response.write RSSRes轻松地输出具体的RSS信息。具体如何做呢?赶快来看看吧。

三、准备工作

如同C语言的include,我们用C#编程首先看需要引用哪些名称空间:

using System;

using System.IO;

using System.Xml;

然后,我们要自定义一个叫做RSS的名称空间,用来准备需要输出RSS信息的XML文档。

namespace RSS

{ /// <summary>

/// 功能说明:按RSS协议生成XML文件

/// 文件格式:类库

/// 文件时间:2005-02-02

/// 函数说明:AddItems 将数据添加到XML流中

/// ReleaseRSS 得到生成的RSS协议字符串

/// 结构体说明:DataField 指定保存数据的结构。

/// </summary>

我们的一条RSS信息包含6项内容,自然可以用一个结构来定义这些数据。

public struct DataField

{ public string link; //链接

public string topic; //主题

public string Abstract; //摘要

public string date; //日期

public string author; //作者

public string detail; //内容

}

public class RSSFeed

{protected string strRSS; //要返回的XML格式的RSS字符串

protected string strItems; //用于存贮每次写入后的中间XML字符串

DataField m_Data; //结构体保存数据字段值

private string mversion; //版本信息

private string mstrFile; //临时文件名(包含路径信息)

public RSSFeed(string m_version,string m_strTempFileName)

{//版本默认值为RSS10

if (m_version.Length ==0) m_version="rss10";

mversion=m_version;

mstrFile=m_strTempFileName;}

//版本属性。只读

private string version

{get

{return mversion;}}

四、编写XML文档

完成结构定义后,我们开始按照RSS标准准备XML文档:

public string ReleaseRSS(DataField mData)

{

XmlTextWriter writer=null;

//取得当前系统时间

string strCurrDate = System.DateTime.Today.ToLongTimeString();

try

{ //打开临时文件

writer = new XmlTextWriter(mstrFile,null);

//指定XML编辑格式

writer.Formatting = Formatting.Indente

d;

//开始写

writer.WriteStartDocument(false);

//写入文档类型

writer.WriteDocType("RSSData",null,null,null);

//根据协议确定写入的格式

switch(mversion.ToLower())

{ case "rss092":

//RSS092协议

......//由于篇幅所限,在此省略

break;

case "rss10":

//RSS10协议

......//由于篇幅所限,在此省略

break;

case "rss20":

//按照RSS20协议标准添加内容

break;

default:

//其他协议

break;}

writer.WriteEndDocument();

writer.Flush();

writer.Close();

//写入完成,以流的方式读出信息保存到局部字段中,并删除临时文件

System.IO.StreamReader rd = new StreamReader(mstrFile);

strRSS = rd.ReadToEnd();

rd.Close();

System.IO.File.Delete(mstrFile);

//返回生成的字符串

return strRSS; }

catch(Exception err)

{//返回出错信息

return err.ToString();

}}}}

五、添加信息,输出RSS

当在临时文件中存储好了符合RSS标准的XML文档之后,我们只需要在其中反复添加数据,就可以轻松地输出数条RSS信息了。来看看具体的操作吧。

private void Page_Load(object sender, System.EventArgs e)

{ Response.ContentType="text/xml";

先创建一个RSSFeed对象。

string rsstemp = System.Web.HttpContext.Current.Server.MapPath("rsstemp.xml");

RSS.RSSFeed rf = new RSS.RSSFeed("rss20", rsstemp);

然后准备发布的数据。

RSS.DataField df;

df.Abstract ="需要发布的摘要";

df.author ="你的名字";

df.date ="发布时间";

df.detail ="内容";

df.link ="链接地址";

df.topic ="主题";

下面的语句完成添加一条具体的RSS信息。

int intRes = rf.AddItems(df);

如果需要参照此格式添加多条RSS信息,可以重复上述过程。

最后,我们将准备好的完整的RSS信息存储在字符串RSSRes中。

string RSSRes = rf.ReleaseRSS(df);

然后我们用一个语句就可以在页面上直接输出RSS信息了。

Response.write RSSRes}

通过这篇短文,我们了解了RSS的基本原理,并实现了一个简单的示例。如果你是站长,恭喜你。你只需要将上述输出的XML文档随意插入到你的网页代码所需的位置中,就可以在你的网页上增加一个漂亮的RSS输出链接了。