Asp.Net 建立一个在线 RSS 新闻聚合器

.NET技术    2009-06-01 06:40  

  概要

  本文讲解了如何使用XMLWeb控件获取远程XML数据并在ASP.NET页面显示这些XML数据,以及使用Repeater控件发布数据库中的XML数据。在过去的几年间,随着异构平台间共享数据的需求不断增长,XML的使用也呈爆炸性增长。意识到这种趋势,微软在整个.NET框架中对XML提供了健壮的支持。这意味着,对于ASP.NET开发者来说,在Web页面中显示和处理XML数据从来没有这么容易过。本文将通过生成一个RSS2.0聚合引擎和在线新闻聚合器来学习XML和ASP.NET技术。本文假设读者熟悉ASP.NET和XML。

  目录

  简介

  使用RSS2.0规范的聚合内容

  通过ASP.NET页面输出聚合内容

  在ASP.NET页面中使用聚合摘要

  显示聚合摘要列表

  显示特定聚合摘要的新闻项

  显示特定新闻项的详细内容

  未来的扩展和当前程序的缺点
总结

  简介

  随着办公室和家庭上网在线时间的延长,以及Web站点和可访问的互联网应用程序呈持续爆炸性增长,应用程序之间能数据共享变得越来越重要。在异构平台之间共享数据需要一种平台中立的数据格式,这种数据格式要求能易于通过标准的互联网协议来传输,而这正是XML的用武之地。因为XML文件本质上只是一个文本文件,其编码格式众所周知,而且现有的XML解析器能为所有主流编程语言所用,所以XML数据能被任何平台轻松使用。
Web网站聚合就是一种使用XML来共享数据的范例,在新闻站点和网志中经常可以看到。采用Web网站聚合技术,网站能以XML格式的Web可访问的聚合文件来发布最新内容。网站使用的聚合格式有很多种,其中最流行的一种格式就是RSS2.0。(RSS2.0规范被发布在HarvardLaw网站的技术栏目上)。此外,MSDN杂志有一个聚合文件:MSDN杂志:本期刊物,其中列出了最新一期MSDN杂志上的文章,包括到在线版本文章的链接。
一旦Web站点有了公开发布聚合文件,那么不同的客户端就可以消费它。消费聚合文件的方式有很多种,比如,某个提供.NET技术资源的站点可能希望在网站中添加最新的MSDN杂志文章标题。聚合文件还常常被新闻聚合器程序所用,这种程序被专门设计用来获取和显示不同来源的聚合文件。
随着人们越来越注重使用XML数据,在ASP.NET页面中处理XML数据的能力变得比以往更关键。既然Web站点聚合如此重要,本文我们就来创建一个Web站点聚合文件生成程序和一个在线新闻聚合器。在建立这两个微型程序的过程中,我们将讲述如何访问和显示XML数据,不论这些数据是来自远端的Web服务器还是本地的文件系统。我们将演示如何多种不同的方法显示XML数据,比如:用Repeater控件以及用ASP.NETXMLWeb控件。
因为这只是一篇小文章,不可能长篇大论,我会假设读者您熟悉XSLT和XPath。如果您不熟悉,建议在看这篇文章之前先访问以下资源:

  FAQ:WhatisXSLTandHowDoesitRelatetoXML
XSLTutorial
XPathTutorial

  使用RSS2.0规范的聚合内容

  本文我们将要创建的第一个微型程序是一个聚合文件生成器。针对这个迷你程序,假设你是一个大型新闻网站(如MSNBC.com)的Web开发者,所有的新闻内容都保存在MicrosoftSQLServer2000数据库中。具体地说,这些文章是都保存在一个名为Articles的表中,表中以下字段与我们的程序密切相关:

  ArticleID—主键,自增长的整型字段,用来唯一标识每一篇文章;

  Title—指定标题,字段数据类型:varchar(50);

  Description—新闻内容描述,字段数据类型:varchar(2000);

  DatePublished—新闻发布日期,字段数据类型:datetime
请注意,Articles表中可能还有其它字段,上面所列的只是我们在创建聚合文件的时候所要用到的字段。而且,这只是一个非常简单的数据模型,在是应用的数据库环境中,你可能会使用更加标准化的数据库模型,比如具备一个单独的authors(作者)表,有一个建立作者和文章之间多对多关系的表等等。
下一步,我们将创建一个ASP.NET页面,用格式化好的RSS2.0XML文件显示一个最新的新闻列表。在讲述如何在ASP.NET页面中完成这种转换之前,我们要先介绍一下RSS2.0规范的内容。我们应该记住,在整个规范中,RSS是被设计用来为聚合内容提供一个数据模型。那么毫无疑问,它会有一系列的XML元素,用来描述Web站点要聚合的内容信息,以及一系列用来描述某一特定新闻项的XML元素。最后,不要忘记RSS聚合文件是一个XML格式文件,必须符合XML格式化的准则,也就是:

  所有XML元素必须正确嵌套;
所有的属性值要用引号包含起来;
< ,>,&,"和''符号要相应地替换为< ,>,&,"和&apos;;
  而且,XML格式是大小写敏感的,这就意味着,XML元素的起始和终止标签必须匹配,拼写和大小写都必须一致。
  RSS2.0的根元素是< rss>元素,这个元素可以有一个版本号的属性,例如:

  < rssversion="2.0">
...
< /rss>

  < rss>元素只有一个子元素< channel>,用来描述聚合的内容。在< channel>元素里面有三个必需的子元素,用来描述Web站点的信息。这三个元素是:

  title—定义聚合文件的名称,一般来说,还会包括Web站点的名称;
link—Web站点的URL;
description—Web站点的一段简短的描述。
除此之外,还有一些可选元素来描述站点信息。这些元素的更多信息请参见RSS2.0规范。

  每一个新闻项目放在一个单独的< item>元素中。< channel>元素可以有任意数量的< item>元素。每个< item>元素可以有多种的子元素,唯一的要求是最少必须包含< title>元素和< description>元素其中一个作为子元素。以下列出了一些相关的< item>子元素:

  title—新闻项目的标题;

  link—新闻项目的URL;

  description—新闻项目的大纲;

  author—新闻项目的作者;

  pubDate—新闻项目的发布日期

  下面是一个非常简单的RSS2.0聚合文件。你可以从RSSgeneratedbyRadioUserLand看到其他的RSS2.0文件的例子。

  < rssversion="2.0">
< channel>
< title>LatestDataWebControls.comFAQs< /title>
< link>http://datawebcontrols.com< /link>
< description>
ThisisthesyndicationfeedfortheFAQs
atDataWebControls.com
< /description>
< item>
< title>WorkingwiththeDataGrid< /title>
< link>http://datawebcontrols.com/faqs/DataGrid.aspx< /link>
< pubDate>Mon,07Jul200321:00:00GMT< /pubDate>
< /item>
< item>
< title>WorkingwiththeRepeater< /title>
< description>
ThisarticleexamineshowtoworkwiththeRepeater
control.
< /description>
< link>http://datawebcontrols.com/faqs/Repeater.aspx< /link>
< pubDate>Tue08Jul200312:00:00GMT< /pubDate>
< /item>
< /channel>
< /rss>

  关于< pubDate>元素的格式有一点特别重要,再此要讲一下。RSS要求日期必须按照RFC822日期和时间规范进行格式化,此格式要求:开头是一个可选的3字母星期缩写加一个逗号。

  接着必须是日加上3字母缩写的月份和年份,最后是一个带时区名的时间。另外,要注意< description>子元素是可选的:上述文件第一个新闻没有< description>元素,而第二个新闻就有一个。

  通过ASP.NET页面输出聚合内容

  现在,我们已经知道了如何按照RSS2.0规范存储我们的新闻项,我们已经就绪创建一个ASP.NET页面,当用户发出请求时,就会返回网站聚合的内容。更确切地说,我们将建立一个名字叫rss.aspx的ASP.NET页面,这个页面会按照RSS2.0规范的格式返回Articles数据库表中的最新的5个新闻项。
可以有几种方法来完成这件事,稍后将会讲到。但是现在,我们首先要完成一件事,那就是先要从数据库中获得最新的5个新闻项。这可以用下面的SQL查询语句获得:

  SELECTTOP5ArticleID,Title,Author,Description,DatePublishedFROMArticlesORDERBYDatePublishedDESC

  获得了这些信息以后,我们需要把这些信息转换成相应的RSS2.0格式聚合文件。要把数据库的数据显示为XML数据最简单、快速的方法就是使用Repeater控件。准确地说,Repeater控件将在HeaderTemplate和FooterTemplate模版里显示< rss>元素、< channel>元素以及站点相关的元素标签,在ItemTemplate模版里面显示< item>元素。下面是我们这个ASP.NET页面(.aspx文件)的HTML部分:

  < %@Pagelanguage="c#"ContentType="text/xml"Codebehind="rss.aspx.cs"
AutoEventWireup="false"Inherits="SyndicationDemo.rss"%>
< asp:Repeaterid="rptRSS"runat="server">
< HeaderTemplate>
< rssversion="2.0">
< channel>
< title>ASP.NETNews!< /title>
< li >

在线留言

我要留言