Web 2.0时代RSS的.Net实现

Web 2.0时代RSS的.Net实现


 Web2.0时是以Blog,Wike,Tag,RSS等技术为代表的以个性化为中心的新一代互联网模式,RSS比起Blog等名词似乎还不算太热。但打开网页仍是遍布了RSS,Xml等醒目的图标,打开页面Mathon浏览器也是一个劲的提示有新的RSS连接,前一段一个项
  
  目需要,自己写了一个.Net下面生成RSS信息的类,如下:
  
  
   1using System;
   2using System.Xml;
   3using System.Collections;
   4using System.Globalization;
   5using System.Web;
   6
   7namespace BLRL
   8{
   9 /// <summary>
   10 /// Summary description for Rss.
   11 /// </summary>
   12 public class Rss
   13 {
   14 const string dublinCoreNamespaceUri = @"http://purl.org/dc/elements/1.1/";
   15 const string slashNamespaceUri = @"http://purl.org/rss/1.0/modules/slash/";
   16 const string syndicationNamespaceUri = @"http://purl.org/rss/1.0/modules/syndication/";
   17 //RSS频道结构
   18 struct RssChannel
   19 {
   20 public string title;//标题
   21 public string link;//连接
   22 public string language;//语言
   23 public string description;//描述
   24 public string webMaster;//发布者
   25 }
   26
   27 //RSS图片信息
   28 struct RssImage
   29 {
   30 public string url;//地址
   31 public string title;//标题
   32 public int height ;//高度
   33 public int width;//长度
   34 }
   35
   36 //RSS项结构
   37 struct RssItem
   38 {
   39 public string title;//标题
   40 public string catalog;//类别
   41 public string link;//连接
   42 public DateTime pubDate;//发布日期
   43 public string description;//描述
   44
   45 }
   46 public Rss()
   47 {
   48 //
   49 // TODO: Add constructor logic here
   50 //
   51 }
   52 /// <summary>
   53 ///添加rss版本信息
   54 /// </summary>
   55 /// <param name="xmlDocument"></param>
   56 /// <returns></returns>
   57 public static XmlDocument AddRssPreamble( XmlDocument xmlDocument)
   58 {
   59 //声明创建1.0版本得xml
   60 XmlDeclaration xmlDeclaration = xmlDocument.CreateXmlDeclaration("1.0", "utf-8", null);
   61 xmlDocument.InsertBefore(xmlDeclaration, xmlDocument.DocumentElement);
   62
   63 XmlElement rssElement = xmlDocument.CreateElement("rss");
   64
   65 XmlAttribute rssVersionAttribute = xmlDocument.CreateAttribute("version");
   66 rssVersionAttribute.InnerText = "2.0";
   67 rssElement.Attributes.Append(rssVersionAttribute);
   68 xmlDocument.AppendChild(rssElement);
   69
   70
   71 XmlAttribute dublicCoreNamespaceUriAttribute = xmlDocument.CreateAttribute("xmlns:dc");
   72 dublicCoreNamespaceUriAttribute.InnerText = dublinCoreNamespaceUri;
   73 rssElement.Attributes.Append(dublicCoreNamespaceUriAttribute);
   74
   75 XmlAttribute slashNamespaceUriAttribute = xmlDocument.CreateAttribute("xmlns:slash");
   76 slashNamespaceUriAttribute.InnerText = slashNamespaceUri;
   77 rssElement.Attributes.Append(slashNamespaceUriAttribute);
   78
   79 XmlAttribute syndicationNamespaceUriAttribute = xmlDocument.CreateAttribute("xmlns:sy");
   80 syndicationNamespaceUriAttribute.InnerText = syndicationNamespaceUri;
   81 rssElement.Attributes.Append(syndicationNamespaceUriAttribute);
   82
   83
   84 return xmlDocument;
   85 }
   86
   87 /// <summary>
   88 /// 添加频道
   89 /// </summary>
   90 /// <param name="xmlDocument"></param>
   91 /// <param name="channel"></param>
   92 /// <returns></returns>
   93 private static XmlDocument AddRssChannel( XmlDocument xmlDocument, RssChannel channel)
   94 {
   95 XmlElement channelElement = xmlDocument.CreateElement("channel");
   96 XmlNode rssElement = xmlDocument.SelectSingleNode("rss");
   97
   98 rssElement.AppendChild(channelElement);
   99
  100 //添加标题
  101 XmlElement channelTitleElement = xmlDocument.CreateElement("title");
  102 channelTitleElement.InnerText = channel.title;
  103 channelElement.AppendChild(channelTitleElement);
  104
  105 //添加连接
  106 XmlElement channelLinkElement = xmlDocument.CreateElement("link");
  107 channelLinkElement.InnerText = channel.link;
  108 channelElement.AppendChild(channelLinkElement);
  109
  110 //添加描述
  111 XmlElement channelDescriptionElement = xmlDocument.CreateElement("description");
  112 XmlCDataSection cDataDescriptionSection = xmlDocument.CreateCDataSection(channel.description);
  113 channelDescriptionElement.AppendChild(cDataDescriptionSection);
  114 channelElement.AppendChild(channelDescriptionElement);
  115
  116 //添加语言
  117 XmlElement languageElement = xmlDocument.CreateElement("language");
  118 languageElement.InnerText = channel.language;
  119 channelElement.AppendChild(languageElement);
  120
  121 //添加发布者
  122 XmlElement webMasterElement = xmlDocument.CreateElement("webMaster");
  123 webMasterElement.InnerText = channel.webMaster;
  124 channelElement.AppendChild(webMasterElement);
  125
  126 return xmlDocument;
  127 }
  128
  129
  130 //添加RssImage
  131 private static XmlDocument AddRssImage(XmlDocument xmlDocument, RssImage img)
  132 {
  133 XmlElement imgElement = xmlDocument.CreateElement("image");
  134 XmlNode channelElement = xmlDocument.SelectSingleNode("rss/channel");
  135
  136 //创建标题
  137 XmlElement imageTitleElement = xmlDocument.CreateElement("title");
  138 imageTitleElement.InnerText = img.title;
  139 imgElement.AppendChild(imageTitleElement);
  140
  141 //创建地址
  142 XmlElement imageUrlElement = xmlDocument.CreateElement("url");
  143 imageUrlElement.InnerText = img.url;
  144 imgElement.AppendChild(imageUrlElement);
  145
  146 //创建高度
  147 XmlElement imageHeightElement = xmlDocument.CreateElement("height");
  148 imageHeightElement.InnerText = img.height.ToString();
  149 imgElement.AppendChild(imageHeightElement);
  150
  151 //创建长度
  152 XmlElement imageWidthElement = xmlDocument.CreateElement("width");
  153 imageWidthElement.InnerText = img.width.ToString();
  154 imgElement.AppendChild(imageWidthElement);
  155
  156 //将图像节点添加到频道节点里面
  157 channelElement.AppendChild(imgElement);
  158 return xmlDocument;
  159
  160 }
  161
  162
  163 /// <summary>
  164 /// 添加项信息
  165 /// </summary>
  166 /// <param name="xmlDocument"></param>
  167 /// <param name="item"></param>
  168 /// <returns></returns>
  169 private static XmlDocument AddRssItem (XmlDocument xmlDocument, RssItem item)
  170 {
  171 XmlElement itemElement = xmlDocument.CreateElement("item");
  172 XmlNode channelElement = xmlDocument.SelectSingleNode("rss/channel");
  173
  174 //创建标题
  175 XmlElement itemTitleElement = xmlDocument.CreateElement("title");
  176 XmlCDataSection cDataTitleSection = xmlDocument.CreateCDataSection(item.title);
  177 itemTitleElement.AppendChild(cDataTitleSection);
  178 itemElement.AppendChild(itemTitleElement);
  179
  180 //创建日期
  181 XmlElement pubDateElement = xmlDocument.CreateElement("pubDate");
  182 pubDateElement.InnerText = XmlConvert.ToString(item.pubDate.ToUniversalTime(), "yyyy-MM-ddTHH:mm:ss");
  183 itemElement.AppendChild(pubDateElement);
  184
  185 //添加连接
  186 XmlElement itemLinkElement = xmlDocument.CreateElement("link");
  187 itemLinkElement.InnerText = item.link;
  188 itemElement.AppendChild(itemLinkElement);
  189
  190 //创建描述
  191 XmlElement itemDescriptionElement = xmlDocument.CreateElement("description");
  192 XmlCDataSection cDataDescriptionSection = xmlDocument.CreateCDataSection(item.description);
  193 itemDescriptionElement.AppendChild(cDataDescriptionSection);
  194 itemElement.AppendChild(itemDescriptionElement);
  195
  196
  197 //创建类型
  198 XmlElement itemcatalogElement = xmlDocument.CreateElement("catalog");
  199 itemcatalogElement.InnerText = item.catalog;
  200 itemElement.AppendChild(itemcatalogElement);
  201
  202 //将RssItem添加到频道节点里面
  203 channelElement.AppendChild(itemElement);
  204
  205 return xmlDocument;
  206 }
  207 }
  208}
  根据特定的需要,可以先将数据读取到列表里面,然后遍历列表,调用上述方法,生成Xml字符串。
  这个字符串就是RS用到XML字符串了。也可以入aspx文件,然后用 <link type="application/rss+xml" rel="alternate" href="rssfeed.aspx">调用下RSS文件,马桶等软件就会自动提示有RRS信息了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值