您的位置:首页 > 其它

Web 2.0时代RSS的.Net实现

2006-06-21 14:31 525 查看
Web2.0时是以Blog,Wike,Tag,RSS等技术为代表的以个性化为中心的新一代互联网模式,RSS比起Blog等名词似乎还不算太热。但打开网页仍是遍布了RSS,Xml等醒目的图标,打开页面Mathon浏览器也是一个劲的提示有新的RSS连接,前一段一个项
目需要,自己写了一个.Net下面生成RSS信息的类,如下:





1

using System;
2

using System.Xml;
3

using System.Collections;
4

using System.Globalization;
5

using System.Web;
6


7

namespace 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信息了

http://jillzhang.cnblogs.com/archive/2006/06/11/423086.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐