原文:
http://www.dotnetbips.com/articles/addaf09f-9b6b-45d2-aba8-da11f23aa53e.aspx
(对原文中的代码我做了一些修改。)
在 .NET 3.5 类库中新增了 Syndication 相关的一些类,可用来读取或提供 RSS Feeds.
首先,需要添加对 System.ServiceModel.Web 这个程序集的引用。
其中包含了 System.ServiceModel.Syndication 名称空间。
一些主要的类如下:
(对原文中的代码我做了一些修改。)
在 .NET 3.5 类库中新增了 Syndication 相关的一些类,可用来读取或提供 RSS Feeds.
首先,需要添加对 System.ServiceModel.Web 这个程序集的引用。
其中包含了 System.ServiceModel.Syndication 名称空间。
一些主要的类如下:
- SyndicationFeed
- SyndicationItem
- SyndicationContent
- SyndicationLink
- SyndicationPerson
- SyndicationCategory
这些分别代表 RSS Feed 中相关的 xml 元素。他们是独立于具体 RSS 格式的。
而要区分格式,则有下列一些 Formatter 类:- Rss20FeedFormatter
- Rss20ItemFormatter
- Atom10FeedFormatter
- Atom10ItemFormatter
分别对应于 RSS 2.0 和 Atom 1.0 两种标准。
下面是一个简单的 asp.net 例子,用这些 API 读取博客园的 Feed 进行显示。
Default.aspx<% @ Page Language = " C# " AutoEventWireup = " true " CodeFile = " Default.aspx.cs " Inherits = " _Default " %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head id ="Head1" runat ="server" >
< title > Untitled Page </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< asp:Label ID ="lblTitle" runat ="server" />
< asp:Repeater ID ="repeater1" runat ="server" >
< ItemTemplate >
< dl >
< dt >
< asp:HyperLink ID ="HyperLink1" runat ="server" Text ='<%# Eval("Title.Text") % > '
Font-Bold="true"
NavigateUrl=' <% # Eval ( " Links[0].Uri.AbsoluteUri " ) %> ' />
</ dt >
< dd > <% # Eval ( " Summary.Text " ) %> </ dd >
< dd > <% # Eval ( " PublishDate.DateTime " , " 发表于:{0} " ) %> </ dd >
</ dl >
</ ItemTemplate >
</ asp:Repeater >
< hr />< asp:Label ID ="lblCopyright" runat ="server" />
</ div >
</ form >
</ body >
</ html >
Default.aspx.cs
using System;
using System.ServiceModel.Syndication;
using System.Xml;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e)
{
if ( ! IsPostBack)
{
var feed = new Rss20FeedFormatter();
using (var xreader = XmlReader.Create( " http://www.cnblogs.com/rss " ))
{
feed.ReadFrom(xreader);
}
lblTitle.Text = feed.Feed.Title.Text;
if (feed.Feed.Copyright != null )
{
lblCopyright.Text = feed.Feed.Copyright.Text;
}
repeater1.DataSource = feed.Feed.Items;
repeater1.DataBind();
}
}
}