讲述动态生成RSS文件的方法。
动态生成RSS文件也基本有两种方法,一种是用字符串累加的方法,另一种是使用xml文档生成的方法。字符串累加的方法也比较简单,我也就不多说了,这里着重说一下生成XmlDocument的方法,包括各种节点的创建,属性的创建等。当然在此也有必要说明一下为什么采用后者,因为后者符合XML DOM标准,有利于你认识dom模型,并且构造速度更快,构造出的xml文档更不容易出错,其中有一些细节我也会做一些必要的讲述。
 
主方法如下:
private void WriteRSS()
{
     XmlDocument domDoc = new XmlDocument();
     XmlDeclaration nodeDeclar = domDoc.CreateXmlDeclaration("1.0", System.Text.Encoding.UTF8.BodyName, "yes");
     domDoc.AppendChild(nodeDeclar);
 
     //如果rss有样式表文件的话,加上这两句
     XmlProcessingInstruction nodeStylesheet = domDoc.CreateProcessingInstruction("xml-stylesheet","type=/"text/css/" href=/"rss.css/"");
     domDoc.AppendChild(nodeStylesheet);
 
     XmlElement root = domDoc.CreateElement("rss");
     root.SetAttribute("version","2.0"); //添加属性结点
     domDoc.AppendChild(root);
 
     XmlElement chnode = domDoc.CreateElement("channel");
     root.AppendChild(chnode);
 
     XmlElement element = domDoc.CreateElement("title");
     XmlNode textNode = domDoc.CreateTextNode("搜狐焦点新闻");    //文本结点
     element.AppendChild(textNode);
     chnode.AppendChild(element);
 
     element = domDoc.CreateElement("link");
     textNode = domDoc.CreateTextNode("http://www.sohu.com");
     element.AppendChild(textNode);
     chnode.AppendChild(element);
 
     element = domDoc.CreateElement("description"); //引用结点
     XmlNode cDataNode = domDoc.CreateCDataSection("即时报道国内外时政大事,解读环球焦点事件");
     element.AppendChild(cDataNode);
     chnode.AppendChild(element);
 
     DataTable dt = GetDataTab();     //访问数据库,获取要在rss中显示的记录
 
     foreach(DataRow dr in dt.Rows)
     {
         element = domDoc.CreateElement("item");
 
         //...
         //创建内容结点,常见的如title,description,link,pubDate,创建方法同上
         //...
 
         chnode.AppendChild(element);
     }
 
     //输出
     XmlTextWriter objTextWrite = new XmlTextWriter(this.Response.OutputStream,System.Text.Encoding.UTF8);
     domDoc.WriteTo(objTextWrite);
     objTextWrite.Flush();
     objTextWrite.Close();
}
 
输出结果如下(item部分是为说明实例手工添加):
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
<channel>
<title>搜狐焦点新闻</title>
<link>http://www.sohu.com</link>
<description>
<![CDATA[即时报道国内外时政大事,解读环球焦点事件
 ]]>
 </description>
<item id="">
        <title></title>
           <link></link>
           <pubDate>2006-10-15 21:59:36</pubDate>
 </item>
<item id="">
          <title></title>
           <link></link>
<pubDate>2006-10-15 10:33:53</pubDate>
</item>
 <title>[中介][出售住宅]明发国际新城32293万元/</title>
 <link>http://www.ewhouse.com/HouseInfo.aspx?publishId=3440</link>
 <pubDate>2006-10-12 10:50:18</pubDate>
 </item>
</channel>
</rss>
有几点值得说明的有:
1、 CreateTextNode,即创建文本结点
有人习惯使用InnerText来添加结点中的文本,虽然结果是一样的,但是要知道在DOM中文本也是结点,既然要符合DOM标准,就要进行到底!
2、 输出
我在实例中使用XmlTextWriter输出。
实际还可以使用如下:
Response.ContentType = "application/xml"; // 输出并按xml数据显示
Response.Write(domDoc.InnerXml);
但是,使用XmlTextWriter输出更快,所以也建议使用这个方法。

用XMLTextWriter方法实现如下:

XmlTextWriter writer = new XmlTextWriter(this.Response.OutputStream,System.Text.Encoding.UTF8);
writer.Formatting = Formatting.Indented;
writer.Indentation = 3;

writer.WriteStartDocument();

writer.WriteComment("Create using XmlTextWriter at " + DateTime.Now);

writer.WriteStartElement("rss");
writer.WriteAttributeString("version","2.0");

writer.WriteStartElement("channel");
writer.WriteElementString("title","搜狐焦点新闻");
writer.WriteElementString("link","http://www.sohu.com");
writer.WriteCData("即时报道国内外时政大事,解读环球焦点事件");

//
//中间添加访问数据库部分...
//
writer.WriteEndElement();
writer.WriteEndElement();

writer.Flush();
writer.Close();

这个方法是把xml文件输出 ,如果要保存为xml文件,第一句用这样:
XmlTextWriter writer = new XmlTextWriter(Server.MapPath("grade.xml",null);

C#与RSS亲密接触相关推荐

  1. 亲密接触VC6.0编译器

    亲密接触VC6.0编译器 大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解.原因是多方面的.大多数情况下,我们只停留在"使用"它,而不会想去"了解" ...

  2. 与Flutter第一次亲密接触-Android 视角

    作者简介 万坤,5年安卓开发经验,16年加入饿了么,现任职饿了么资深安卓开发工程师,负责饿了么物流安卓相关APP线上的高稳定运行. 前言 Flutter在今年6月份发布第一个Release预览版以来, ...

  3. [360] 《如何保持电力接触网与受电弓亲密接触》

    在列车运行过程中,总希望受电弓与接触线能够始终保持亲密接触.从原理上来说,弓网关系最好的情况莫过于让电流从接触网可靠稳定的"漏"到受电弓上,所以受电弓升起的时候"电弓与电 ...

  4. 亲密接触Redis-第三天(Redis的Load Balance)

    前言 上两天讲述了Redis的基本搭建和基于HA的集群布署方式以及相关的策略和注意点.今天开始讲述Redis的Cluster功能,而这块目前来说网上资料不是太全,就算有1,2篇也只是单讲服务端的搭建也 ...

  5. 《民富论》之读后感--与创业的第一次亲密接触

    <民富论>之读后感        ――与创业的第一次亲密接触 前一段时间读了一本<穷爸爸,富爸爸>的书,开始对理财有了兴趣,同时也是因为具备了理财的条件――资产已经由负转正,可 ...

  6. 与chatGPT的第一次亲密接触

    最近,chatGPT火了,不管传统媒体,还是各种自媒体平台都在说它.今天我突然也想注册一个玩玩,注册前2步还行,但是等点开邮箱校验时,打开网页显示: 上网查了一下,没向中国开放服务:如要注册除了要邮箱 ...

  7. day01 与MySQL的第一次亲密接触基础查询条件查询

    <尚硅谷>MySQL系统课程一共6天,下面介绍第1天的学习内容,主要涉及MySQL的内容介绍.进阶1基础查询和进阶2条件查询.干货满满,跟着课程的进度来的,可能篇幅略长,但是看完一定会有收 ...

  8. 小甲鱼python 第001讲:我和Python的第一次亲密接触

    文章目录 第000讲:愉快的开始 第001讲:我和Python的第一次亲密接触 讲课思尻 思尻题 1.python是脚本类型的语言 2.IDLE是什么 3.print()的作用 4.为什么 >& ...

  9. 1、第一次亲密接触Linux

    1.第一次亲密接触Linux (1)学会使用快捷键 Ctrl+C:表示终止当前命令 Tab:自动补全功能 Ctrl+D:退出当前终端 Ctrl+Z:表示暂停当前进程 Ctrl+L:表示清屏 (2)学会 ...

最新文章

  1. SOC,System on-a-Chip技术初步
  2. 【HDOJ】4333 Revolving Digits
  3. 【javascript位置属性】screen对象
  4. WINCE6.0在控制面板添加控制面板应用程序
  5. matplotlib.pyplot常用画图方式函数封装(一)——.plot绘制折线图及设置坐标轴箭头完美解决
  6. 安川机器人如何备份_YASKAWA机器人视觉局域网设置参考
  7. c语言程序输入n个数字排序,输入n个数字然后进行排序,用C语言编写。注意是n个数啊,不是确定的个数。...
  8. 研一寒假02-指针_new分配内存_使用new来创建动态数组_使用动态数组_使用delete来释放new分配的内存...
  9. 给网页标题添加icon小图标
  10. 北京市电影局:重要项目不停工、不流产、不降标
  11. 使用青云主机的GPU主机教程(不完整版)
  12. css相关笔记(一)
  13. ISO50001认证咨询,企业申请ISO50001认证前要先进行哪些初始能源评审
  14. 垂涎欲滴的互联网灰色产业链!
  15. pdf提取其中一页操作方法
  16. 五.linux设备驱动模型
  17. Windows Server 2008 R2使用WDS服务实现批量安装操作系统演示
  18. Spring源码环境搭建
  19. import 库、from 库 import 函数、from 库 impor *、import 库 as 别名的区别
  20. 微信小程序基础入门(一):小程序界面介绍创造自己的第一个小程序

热门文章

  1. Linux进程间的通信----->共享内存
  2. pythontkinter真实的例子_python小实例——tkinter实战(计算器)
  3. shell脚本求和_【零基础学云计算】Shell编程之case语句与循环语句
  4. http 错误 404.0 - not found_python3从零学习-5.10.8、http.client—HTTP 协议客户端
  5. 卷积神经网络基础:(7)经典的网络架构
  6. QT:(4)解决在VS15下配置QT后没有QT GUI Application选项
  7. 基于CUDA实现立方体贴图 (Cubemaps) 转换为全景图 (Equirectangular Panorama)
  8. Udacity机器人软件工程师课程笔记(十五)-运动学-正向运动学和反向运动学(其二)-DH参数等
  9. 安装vim-go插件之后遇到的gopls警告信息不消失的问题的解决方法
  10. 一文运维zookeeper