• 在 ASP.NET MVC Web 应用程序中输出 RSS Feeds


    RSS全称Really Simple Syndication。一些更新频率较高的网站可以通过RSS让订阅者快速获取更新信息。RSS文档需遵守XML规范的,其中必需包含标题、链接、描述信息,还可以包含发布时间、最后更新时间等信息。

    本文将介绍通过LINQ to XML生成XML文档,并在ASP.NET MVC Web应用程序中输出。

    在生成RSS文档前,先简单了解一下RSS的结构。根节点rss下有channel节点,channel节点的一些子节点(title,link,description)包含了该RSS的部分描述信息。channel下可包含多个item节点用来表示多个内容信息,如博客中的文章、论坛中的帖子。

    代码
     1 <rss version="2.0">
     2   <channel>
     3     <title>channel标题</title>
     4     <link>网页地址</link>
     5     <description>channel描述</description>
     6     <item>
     7       <title>内容1标题</title>
     8       <description>内容1描述</description>
     9       <link>内容1链接</link>
    10     </item>
    11     <item>
    12       <title>内容2标题</title>
    13       <description>内容2描述</description>
    14       <link>内容2链接</link>    </item>
    15   </channel>
    16 </rss>

    1. 用LINQ to XML生成类似上述的文档。

    1.1 新建一个XDocument,添加根节点和相关属性描述。

    代码
    1 XDocument doc = new XDocument(
    2     new XDeclaration("1.0""utf-8""yes"),    // XML文档声明
    3     new XElement("rss",    // 根节点
    4     new XAttribute("version""2.0"),    // rss节点的属性
    5     new XElement(channel    // rss的子节点channel
    6         )));                    )));

    1.2 处理channel节点和它的相关描述。

    代码
    1 XElement channel = new XElement("channel");    // channel节点
    2 channel.Add(new XElement[]{
    3     new XElement("title","Test"),    // channel标题
    4     new XElement("link","http://localhost"),    // 页面链接
    5     new XElement("description","Test RSS")    // channel描述
    6 });

    1.3 往channel节点增加内容信息,rssFeedList是 List<RssFeed>类型的。由于item数量不固定,这里用了foreach将list中的每一个内容信息都加到channel。

    代码
     1 foreach (var rssFeed in rssFeedList)    // 对rssFeed集合中的每个元素进行处理
     2 {
     3     XElement item = new XElement("item"new XElement[]{    // 生成一个新的item节点
     4         new XElement("title",rssFeed.Title),    // 为新的item节点添加子节点
     5         new XElement("description",rssFeed.Description),
     6         new XElement("link",rssFeed.Link),
     7         new XElement("pubDate",rssFeed.PublishDate)
     8     });
     9     channel.Add(item);    // 将新的item节点添加到channel中
    10 }

    2. 创建RssFeedResult类

    我们写一个RssFeedResult类,继承自ActionResult,以便在ASP.NET MVC的controller中返回RSS。关于这部分内容可参考之前的一篇文章《让ASP.NET MVC页面返回不同类型的内容》。

    代码
     1 public class RssFeedResult : ActionResult
     2 {
     3     List<RssFeed> Data { getset; }
     4 
     5     public RssFeedResult(List<RssFeed> data)
     6     {
     7         Data = data;
     8     }
     9 
    10     public override void ExecuteResult(ControllerContext context)
    11     {
    12         if (context == null)
    13         {
    14             throw new ArgumentNullException("context");
    15         }
    16 
    17         HttpResponseBase response = context.HttpContext.Response;
    18         response.ContentType = "text/xml";    // 设置HTTP头中的ContentType
    19         XDocument result= RssFeedHelper.GetRssFeed(Data);    // 获取XML数据
    20         response.Write(result.ToString());    // 将XML数据写入response中
    21     }
    22 }

    3. 在controller中使用

    我们只要在controller中调用RssFeedResult(rssFeedList)方法即可返回RSS页面了。

    代码
    public RssFeedResult Rss()
    {
        
    // 添加2个测试用的数据
        RssFeed r1 = new RssFeed { Description = "Test1", Link = "http://localhost/1", Title = "Test1", PublishDate = DateTime.Now };
        RssFeed r2 
    = new RssFeed { Description = "Test2", Link = "http://localhost/2", Title = "Test2", PublishDate = DateTime.Now };
        List
    <RssFeed> rssFeedList = new List<RssFeed>();
        rssFeedList.Add(r1);
        rssFeedList.Add(r2);
                
        
    // 返回RSS
        return new RssFeedResult(rssFeedList);
    }

    示例下载 (Visual Studio 2010) 

    另外,还有一个工具ASP.NET RSS Toolkit,有需要的可以参考一下。

    http://www.cnblogs.com/snowdream/archive/2010/08/29/publish-rss-feeds-in-aspnet-mvc-web-application.html

  • 相关阅读:
    hdu 2709 Sumsets
    hdu 2004 成绩转换
    hihocoder 1043 完全背包
    hihocoder 1038 01背包
    hihocoder 1066 无间道之并查集
    并查集小结
    hdu 1232 畅通工程
    并查集学习2
    并查集知识学习
    js 禁止表单提交的方法(文件上传)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1812161.html
Copyright © 2020-2023  润新知