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

原文: 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();
            }
        }
    }


     

  • posted on 2008-04-22 10:40  NeilChen  阅读(959)  评论(0编辑  收藏  举报

    导航