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 { get; set; }
 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 MVC Web 应用程序中输出 RSS Feeds的更多相关文章

  1. ASP.NET MVC3 Web应用程序中启用GZip压缩示例

    http://www.mzwu.com/article.asp?id=3284 自定义一个筛选器,继承于GZipAttribute: using System;using System.IO.Comp ...

  2. ASP.NET MVC & Web API项目中集成MEF

    1.实现方式 //WebApi需要实现的接口 System.Web.Http.Dependencies.IDependencyResolver //MVC需要实现的接口 System.Web.Mvc. ...

  3. ASP.NET MVC - 探究应用程序文件夹

    为了学习 ASP.NET MVC,我们将构建一个 Internet 应用程序. 第 2 部分:探究应用程序文件夹. MVC 文件夹 一个典型的 ASP.NET MVC Web 应用程序的文件夹内容如下 ...

  4. ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料

    本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/  谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三. ...

  5. ASP.NET Core Web 应用程序系列(三)- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)

    在上一章中主要和大家分享了在ASP.NET Core中如何使用Autofac替换自带DI进行构造函数的批量依赖注入,本章将和大家继续分享如何使之能够同时支持属性的批量依赖注入. 约定: 1.仓储层接口 ...

  6. ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)

    在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入. P ...

  7. [译]ABP框架使用AngularJs,ASP.NET MVC,Web API和EntityFramework构建N层架构的SPA应用程序

    本文转自:http://www.skcode.cn/archives/281 本文演示ABP框架如何使用AngularJs,ASP.NET MVC,Web API 和EntityFramework构建 ...

  8. 【转载】ASP.NET MVC Web API 学习笔记---第一个Web API程序

    1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...

  9. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

随机推荐

  1. MySQL中,修改表的某一字段的部分值

    语法:update 表名 set 字段名 = replace(字段名,'替换前内容','替换后的内容') where 条件. 如: 执行sql语句:update student set name = ...

  2. Linux+svn无法显示日志

    自己在linux中配置了一个svn服务器,但是客户端在浏览日志的时候报错.提示不能连接到服务器,是否离线查看... 谷歌了一下,是因为svnserve.conf中配置了anon-access = re ...

  3. Java知识总结--三大框架

    1 应用服务器有哪些:weblogic,jboss,tomcat 2 Hibernate优于JDBC的地方 1)对jdbc访问数据库进行了封装,简化了数据访问层的重复代码 2)Hibernate 操作 ...

  4. PHP 递归创建目录

    /* 用迭代的方法递归创建目录 其实在PHP5.0.0之后mkdir就已经能递归创建目录了. 这里主要是自己学习迭代,所以拿创建级联目录开刀了. 开发中应该写mkdir('./a/b/c/d/e',0 ...

  5. 解决php json_encode 出现的中文转码、乱码问题

    // 防止json中文转码 function jsonEncodeWithCN($data) { return preg_replace("/\\\u([0-9a-f]{4})/ie&quo ...

  6. Python中使用ElementTree解析xml

    在Python中,ElementTree是我们常用的一个解析XML的模块 1.导入ElementTree模块 from xml.etree import ElementTree as ET 2.初始化 ...

  7. qt 5 小练习 纯代码制作自定义按钮

    大家都知道QT设计师中直接拖动的按钮是长方形带有圆角的图案,那我们如何来设置自定义按钮呢 要设计一个按钮,我们必须要知道按钮有什么属性,首先,按钮必须有一个位置 第二,按钮必须有一个名称.还有当我们点 ...

  8. 制作标签(Label)

    怎样判断是否应当使用标签 当游戏中出现需要程序输出文字的地方,就要使用标签. 创建标签 在Unity顶部选择NGUI菜单.选择Create->Label,即可创建一个Label. Label的文 ...

  9. Iis load balance

    http://www.agilesharp.com/u/yanyangtian/Blog.aspx/t-196  IIS负载均衡-Application Request Route详解第二篇:创建与配 ...

  10. UICountingLabel实现数字变化的动画效果-b

    在大多数金融类 app 上或者其他 app 需要数字展示的地方, 经常会有如下的动画效果: 动画效果 怎么做呢? 一.下载UICountingLabel 下载地址: https://github.co ...