概要
本文讲解了如何使用XMLWeb控件获取远程XML数据并在ASPNET页面显示这些XML数据以及使用Repeater控件发布数据库中的XML数据在过去的几年间随着异构平台间共享数据的需求不断增长XML的使用也呈爆炸性增长意识到这种趋势微软在整个NET框架中对XML提供了健壮的支持这意味着对于ASPNET开发者来说在Web页面中显示和处理XML数据从来没有这么容易过本文将通过生成一个RSS聚合引擎和在线新闻聚合器来学习XML和ASPNET技术本文假设读者熟悉ASPNET和XML
目录
简介
使用RSS规范的聚合内容
通过ASPNET页面输出聚合内容
在ASPNET页面中使用聚合摘要
显示聚合摘要列表
显示特定聚合摘要的新闻项
显示特定新闻项的详细内容
未来的扩展和当前程序的缺点
总结
简介
随着办公室和家庭上网在线时间的延长以及Web站点和可访问的互联网应用程序呈持续爆炸性增长应用程序之间能数据共享变得越来越重要在异构平台之间共享数据需要一种平台中立的数据格式这种数据格式要求能易于通过标准的互联网协议来传输而这正是XML的用武之地因为XML文件本质上只是一个文本文件其编码格式众所周知而且现有的XML解析器能为所有主流编程语言所用所以XML数据能被任何平台轻松使用
Web网站聚合就是一种使用XML来共享数据的范例在新闻站点和网志中经常可以看到采用Web网站聚合技术网站能以XML格式的Web可访问的聚合文件来发布最新内容网站使用的聚合格式有很多种其中最流行的一种格式就是RSS(RSS规范被发布在HarvardLaw网站的技术栏目上)此外MSDN杂志有一个聚合文件MSDN杂志本期刊物其中列出了最新一期MSDN杂志上的文章包括到在线版本文章的链接
一旦Web站点有了公开发布聚合文件那么不同的客户端就可以消费它消费聚合文件的方式有很多种比如某个提供NET技术资源的站点可能希望在网站中添加最新的MSDN杂志文章标题聚合文件还常常被新闻聚合器程序所用这种程序被专门设计用来获取和显示不同来源的聚合文件
随着人们越来越注重使用XML数据在ASPNET页面中处理XML数据的能力变得比以往更关键既然Web站点聚合如此重要本文我们就来创建一个Web站点聚合文件生成程序和一个在线新闻聚合器在建立这两个微型程序的过程中我们将讲述如何访问和显示XML数据不论这些数据是来自远端的Web服务器还是本地的文件系统我们将演示如何多种不同的方法显示XML数据比如用Repeater控件以及用ASPNETXMLWeb控件
因为这只是一篇小文章不可能长篇大论我会假设读者您熟悉XSLT和XPath如果您不熟悉建议在看这篇文章之前先访问以下资源
FAQ:WhatisXSLTandHowDoesitRelatetoXML
XSLTutorial
XPathTutorial
使用RSS规范的聚合内容
本文我们将要创建的第一个微型程序是一个聚合文件生成器针对这个迷你程序假设你是一个大型新闻网站(如)的Web开发者所有的新闻内容都保存在MicrosoftSQLServer数据库中具体地说这些文章是都保存在一个名为Articles的表中表中以下字段与我们的程序密切相关
ArticleID—主键自增长的整型字段用来唯一标识每一篇文章
Title—指定标题字段数据类型varchar()
Author—指定作者字段数据类型varchar()
Description—新闻内容描述字段数据类型varchar()
DatePublished—新闻发布日期字段数据类型datetime
请注意Articles表中可能还有其它字段上面所列的只是我们在创建聚合文件的时候所要用到的字段而且这只是一个非常简单的数据模型在是应用的数据库环境中你可能会使用更加标准化的数据库模型比如具备一个单独的authors(作者)表有一个建立作者和文章之间多对多关系的表等等
下一步我们将创建一个ASPNET页面用格式化好的RSSXML文件显示一个最新的新闻列表在讲述如何在ASPNET页面中完成这种转换之前我们要先介绍一下RSS规范的内容我们应该记住在整个规范中RSS是被设计用来为聚合内容提供一个数据模型那么毫无疑问它会有一系列的XML元素用来描述Web站点要聚合的内容信息以及一系列用来描述某一特定新闻项的XML元素最后不要忘记RSS聚合文件是一个XML格式文件必须符合XML格式化的准则也就是
所有XML元素必须正确嵌套
所有的属性值要用引号包含起来
< >&和符号要相应地替换为< >&和'
而且XML格式是大小写敏感的这就意味着XML元素的起始和终止标签必须匹配拼写和大小写都必须一致
RSS的根元素是< rss>元素这个元素可以有一个版本号的属性例如
< rssversion=>
< /rss>
< rss>元素只有一个子元素< channel>用来描述聚合的内容在< channel>元素里面有三个必需的子元素用来描述Web站点的信息这三个元素是
title—定义聚合文件的名称一般来说还会包括Web站点的名称
link—Web站点的URL
description—Web站点的一段简短的描述
除此之外还有一些可选元素来描述站点信息这些元素的更多信息请参见RSS规范
每一个新闻项目放在一个单独的< item>元素中< channel>元素可以有任意数量的< item>元素每个< item>元素可以有多种的子元素唯一的要求是最少必须包含< title>元素和< description>元素其中一个作为子元素以下列出了一些相关的< item>子元素
title—新闻项目的标题
link—新闻项目的URL
description—新闻项目的大纲;
author—新闻项目的作者;
pubDate—新闻项目的发布日期
下面是一个非常简单的RSS聚合文件你可以从RSSgeneratedbyRadioUserLand看到其他的RSS文件的例子
< rssversion=>
< channel>
< title>LatesFAQs< /title>
< link>; /link>
< description>
ThisisthesyndicationfeedfortheFAQs
a
< /description>
< item>
< title>WorkingwiththeDataGrid< /title>
< link>x< /link>
< pubDate>MonJul::GMT< /pubDate>
< /item>
< item>
< title>WorkingwiththeRepeater< /title>
< description>
ThisarticleexamineshowtoworkwiththeRepeater
control
< /description>
< link>x< /link>
< pubDate>TueJul::GMT< /pubDate>
< /item>
< /channel>
< /rss>
关于< pubDate>元素的格式有一点特别重要再此要讲一下RSS要求日期必须按照RFC日期和时间规范进行格式化此格式要求开头是一个可选的字母星期缩写加一个逗号
接着必须是日加上字母缩写的月份和年份最后是一个带时区名的时间另外要注意< description>子元素是可选的上述文件第一个新闻没有< description>元素而第二个新闻就有一个
通过ASPNET页面输出聚合内容
现在我们已经知道了如何按照RSS规范存储我们的新闻项我们已经就绪创建一个ASPNET页面当用户发出请求时就会返回网站聚合的内容更确切地说我们将建立一个名字叫rssaspx的ASPNET页面这个页面会按照RSS规范的格式返回Articles数据库表中的最新的个新闻项
可以有几种方法来完成这件事稍后将会讲到但是现在我们首先要完成一件事那就是先要从数据库中获得最新的个新闻项这可以用下面的SQL查询语句获得
SELECTTOPArticleIDTitleAuthorDescriptionDatePublishedFROMArticlesORDERBYDatePublishedDESC
获得了这些信息以后我们需要把这些信息转换成相应的RSS格式聚合文件要把数据库的数据显示为XML数据最简单快速的方法就是使用Repeater控件准确地说Repeater控件将在HeaderTemplate和FooterTemplate模版里显示< rss>元素< channel>元素以及站点相关的元素标签在ItemTemplate模版里面显示< item>元素下面是我们这个ASPNET页面(aspx文件)的HTML部分
< %@Pagelanguage=c#ContentType=text/xmlCodebehind=rssaspxcs
AutoEventWireup=falseInherits=SyndicationDemorss%>
< asp:Repeaterid=rptRSSrunat=server>
< HeaderTemplate>
< rssversion=>
< channel>
< title>ASPNETNews!< /title>
< li >