您的位置:首页 > Web前端

[摘要] 利用 .NET 3.5 的 Syndication 相关类读取 RSS Feeds

2008-04-22 10:16 295 查看
原文: http://www.dotnetbips.com/articles/addaf09f-9b6b-45d2-aba8-da11f23aa53e.aspx

(对原文中的代码我做了一些修改。)

在 .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();
        }
    }
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息