(对原文中的代码我做了一些修改。)
在 .NET 3.5 类库中新增了 Syndication 相关的一些类,可用来读取或提供 RSS Feeds.
首先,需要添加对 System.ServiceModel.Web 这个程序集的引用。
其中包含了 System.ServiceModel.Syndication 名称空间。
一些主要的类如下:
这些分别代表 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>
<!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();
}
}
}
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();
}
}
}