I was writing an RSS feed some time ago.
After several modifications, the relevant code was written into a separate class.
It feels quite convenient to reuse. So I posted it and let everyone study it together.
The following is the RssBase.cs class:
1using System;
2using System.Collections.Generic;
3using System.Xml;
4
5namespace MyMedia.Utilities
6{
7 public class RssBase
8 {
9 RssBase constructor#region RssBase constructor
10 public RssBase(XmlTextWriter rssWriter)
11 {
12 this.rssWriter = rssWriter;
13}
14 public RssBase(XmlTextWriter rssWriter, bool hasMedia, IList<ItemInfo> items)
15 {
16 this.rssWriter = rssWriter;
17 this.hasMedia = hasMedia;
18 this.items = items;
19}
20 #endregion
twenty one
22 [Serializable]
23 public sealed class ItemInfo
twenty four {
25 ItemInfo constructor#region ItemInfo constructor
26 public ItemInfo() { }
27 public ItemInfo(string itemTitle, string itemLink, string itemDescription, string itemPubDate, string itemAuthor, string itemGuid)
28 {
29 this.itemTitle = itemTitle;
30 this.itemLink = itemLink;
31 this.itemDescription = itemDescription;
32 this.itemAuthor = itemAuthor;
33 this.itemGuid = itemGuid;
34 this.itemPubDate = itemPubDate;
35}
36 public ItemInfo(string itemTitle, string itemLink, string itemDescription, string itemPubDate, string itemAuthor,
37 string itemGuid, string mediaContentUrl, string mediaTitle, string mediaDescription,
38 string mediaThumbUrl, string mediaThumbWidth, string mediaThumbHeight, string mediaAuthor)
39 {
40 this.itemTitle = itemTitle;
41 this.itemLink = itemLink;
42 this.itemDescription = itemDescription;
43 this.itemPubDate = itemPubDate;
44 this.itemAuthor = itemAuthor;
45 this.itemGuid = itemGuid;
46 this.mediaContentUrl = mediaContentUrl;
47 this.mediaTitle = mediaTitle;
48 this.mediaDescription = mediaDescription;
49 this.mediaThumbUrl = mediaThumbUrl;
50 this.mediaThumbWidth = mediaThumbWidth;
51 this.mediaThumbHeight = mediaThumbHeight;
52 this.mediaAuthor = mediaAuthor;
53}
54 #endregion
55
56 Internal item variables#region Internal item variables
57 // Item variables
58 private string itemTitle;
59 private string itemLink;
60 private string itemDescription;
61 private string itemPubDate = DateTime.Now.ToString("r");
62 private string itemDateTaken = DateTime.Now.ToString();
63 private string itemAuthor;
64 private string itemGuid;
65 // Media variables
66 private string mediaContentUrl;
67 private string mediaTitle;
68 private string mediaDescription;
69 private string mediaThumbUrl;
70 private string mediaThumbWidth;
71 private string mediaThumbHeight;
72 private string mediaAuthor;
73 #endregion
74
75 Item properties#region Item properties
76 public string ItemTitle
77 {
78 set { itemTitle = value; }
79 get { return itemTitle; }
80}
81 public string ItemLink
82 {
83 set { itemLink = value; }
84 get { return itemLink; }
85}
86 public string ItemDescription
87 {
88 set { itemDescription = value; }
89 get { return itemDescription; }
90}
91 public string ItemPubDate
92 {
93 set { itemPubDate = value; }
94 get { return itemPubDate; }
95 }
96 public string ItemDateTaken
97 {
98 set { itemDateTaken = value; }
99 get { return itemDateTaken; }
100}
101 public string ItemAuthor
102 {
103 set { itemAuthor = value; }
104 get { return itemAuthor; }
105 }
106 public string ItemGuid
107 {
108 set { itemGuid = value; }
109 get { return itemGuid; }
110 }
111 public string MediaContentUrl
112 {
113 set { mediaContentUrl = value; }
114 get { return mediaContentUrl; }
115 }
116 public string MediaTitle
117 {
118 set { mediaTitle = value; }
119 get { return mediaTitle; }
120 }
121 public string MediaDescription
122 {
123 set { mediaDescription = value; }
124 get { return mediaDescription; }
125 }
126 public string MediaThumbUrl
127 {
128 set { mediaThumbUrl = value; }
129 get { return mediaThumbUrl; }
130 }
131 public string MediaThumbWidth
132 {
133 set { mediaThumbWidth = value; }
134 get { return mediaThumbWidth; }
135 }
136 public string MediaThumbHeight
137 {
138 set { mediaThumbHeight = value; }
139 get { return mediaThumbHeight; }
140 }
141 public string MediaAuthor
142 {
143 set { mediaAuthor = value; }
144 get { return mediaAuthor; }
145 }
146 #endregion
147
148 }
149
150 Const string#region Const string
151 private const string TITLE = "MyMedia RSS";
152 private const string XMLNS_MEDIA = " http://www.MyWii.com.au ";
153 private const string XMLNS_DC = " http://purl.org/dc/elements/1.1/ ";
154 private const string LINK = " http://www.MyWii.com.au/ ";
155 private const string DESCRIPTION = "description";
156 private const string LANGUAGE = "en-us";
157 private const string COPYRIGHT = "Copyright 2006";
158 private const string GENERATOR = "MyMedia RSS Generator";
159 private const string IMAGE_URL = " 160 private const string IMAGE_TITLE = "MyWii";
161 private const string IMAGE_LINK = " http://www.MyWii.com.au ";
162 private string PUB_DATE = DateTime.Now.ToString("r");
163 private string LAST_BUILD_DATE = DateTime.Now.ToString("r");
164
165 #endregion
166
167 Internal member variables#region Internal member variables
168 private XmlTextWriter rssWriter;
169 private bool hasMedia;
170 private IList<ItemInfo> items;
171 #endregion
172
173 Properties#region Properties
174 public XmlTextWriter RssWriter
175 {
176 set { rssWriter = value; }
177 get { return rssWriter; }
178 }
179 public bool HasMedia
180 {
181 set { hasMedia = value; }
182 get { return hasMedia; }
183}
184 public IList<ItemInfo> Items
185 {
186 set { items = value; }
187 get { return items; }
188 }
189
190 #endregion
191
192 Private method#region Private method
193
194 private void WritePrologue()
195 {
196 rssWriter.WriteStartDocument();
197 rssWriter.WriteStartElement("rss");
198 rssWriter.WriteAttributeString("version", "2.0");
199 rssWriter.WriteAttributeString("xmlns:media", XMLNS_MEDIA);
200 rssWriter.WriteAttributeString("xmlns:dc", XMLNS_DC);
201 rssWriter.WriteString("n ");
202 // Write in channel block
203 rssWriter.WriteStartElement("channel");
204 rssWriter.WriteString("n ");
205 rssWriter.WriteElementString("title", TITLE);
206 rssWriter.WriteString("n ");
207 rssWriter.WriteElementString("link", LINK);
208 rssWriter.WriteString("n ");
209 rssWriter.WriteElementString("description", DESCRIPTION);
210 rssWriter.WriteString("n ");
211 rssWriter.WriteElementString("pubDate", PUB_DATE);
212 rssWriter.WriteString("n ");
213 rssWriter.WriteElementString("lastBuildDate", LAST_BUILD_DATE);
214 rssWriter.WriteString("n ");
215 rssWriter.WriteElementString("language", LANGUAGE);
216 rssWriter.WriteString("n ");
217 rssWriter.WriteElementString("copyright", COPYRIGHT);
218 rssWriter.WriteString("n ");
219 rssWriter.WriteElementString("generator", GENERATOR);
220 rssWriter.WriteString("n ");
221 // Write in image block
222 rssWriter.WriteStartElement("image");
223 rssWriter.WriteString("n ");
224 rssWriter.WriteElementString("url", IMAGE_URL);
225 rssWriter.WriteString("n ");
226 rssWriter.WriteElementString("title", IMAGE_TITLE);
227 rssWriter.WriteString("n ");
228 rssWriter.WriteElementString("link", IMAGE_LINK);
229 rssWriter.WriteString("n ");
230 rssWriter.WriteEndElement();
231 rssWriter.WriteString("n ");
232 }
233
234 /**//// <summary>
235 /// Write in items
236 /// </summary>
237 private void WriteItem(ItemInfo item)
238 {
239 // Write in item block
240 rssWriter.WriteStartElement("item");
241 rssWriter.WriteString("n ");
242 rssWriter.WriteElementString("title", item.ItemTitle);
243 rssWriter.WriteString("n ");
244 rssWriter.WriteElementString("link", item.ItemLink);
245 rssWriter.WriteString("n ");
246
247 rssWriter.WriteStartElement("description");
248 rssWriter.WriteString("n ");
249 rssWriter.WriteCData(item.ItemDescription);
250 rssWriter.WriteString("n ");
251 rssWriter.WriteEndElement();
252
253 rssWriter.WriteString("n ");
254 rssWriter.WriteElementString("pubDate", item.ItemPubDate);
255 rssWriter.WriteString("n ");
256 rssWriter.WriteElementString("dc:date.Taken", item.ItemDateTaken);
257 rssWriter.WriteString("n ");
258 rssWriter.WriteElementString("author", item.ItemAuthor);
259 rssWriter.WriteString("n ");
260 rssWriter.WriteStartElement("guid");
261 rssWriter.WriteAttributeString("isPermaLink", "false");
262 rssWriter.WriteString(item.ItemGuid);
263 rssWriter.WriteEndElement();
264
265
266 // Write item media here
267
268 }
269
270 /**//// <summary>
271 /// Write in item media
272 /// </summary>
273 /// <param name="item">ItemInfo item</param>
274 private void WriteItemMedia(ItemInfo item)
275 {
276 // Write in media
277 rssWriter.WriteString("n ");
278 rssWriter.WriteStartElement("media:content");
279 rssWriter.WriteAttributeString("url", item.MediaContentUrl);
280 rssWriter.WriteAttributeString("type", "image/jpeg");
281 rssWriter.WriteEndElement();
282 rssWriter.WriteString("n ");
283 rssWriter.WriteElementString("media:title", item.MediaTitle);
284 rssWriter.WriteString("n ");
285 rssWriter.WriteStartElement("media:text");
286 rssWriter.WriteAttributeString("type", "html");
287 rssWriter.WriteString(item.MediaDescription);
288 rssWriter.WriteEndElement();
289 rssWriter.WriteString("n ");
290 rssWriter.WriteStartElement("media:thumbnail");
291 rssWriter.WriteAttributeString("url", item.MediaThumbUrl);
292 rssWriter.WriteAttributeString("height", item.MediaThumbHeight);
293 rssWriter.WriteAttributeString("width", item.MediaThumbWidth);
294 rssWriter.WriteEndElement();
295 rssWriter.WriteString("n ");
296 rssWriter.WriteStartElement("media:credit");
297 rssWriter.WriteAttributeString("role", "photographer");
298 rssWriter.WriteString(item.MediaAuthor);
299 rssWriter.WriteEndElement();
300 rssWriter.WriteString("n ");
301
302 }
303
304 /**//// <summary>
305 /// Close item element
306 /// </summary>
307 private void WriteItemEnd()
308 {
309 rssWriter.WriteString("n ");
310 rssWriter.WriteEndElement();
311 rssWriter.WriteString("n ");
312 }
313
314 /**//// <summary>
315 /// Close all the elements
316 /// </summary>
317 private void WriteEnd()
318 {
319 rssWriter.WriteEndElement();
320 rssWriter.WriteString("n");
321 rssWriter.WriteEndElement();
322 rssWriter.WriteEndDocument();
323 }
324
325 #endregion
326
327 /**//// <summary>
328 /// Write RSS feed
329 /// </summary>
330 public void WriteRSS()
331 {
332 WritePrologue();
333 foreach (ItemInfo info in items)
334 {
335 WriteItem(info);
336 if (hasMedia)
337 WriteItemMedia(info);
338 WriteItemEnd();
339 }
340 WriteEnd();
341 }
342 }
343}
Then use a FeedBase.cs class to call the methods and properties in the RssBase class above. The code is as follows. (This file has been changed. If you want to compile it, you need to make relevant modifications)
1using System.Collections.Generic;
2using System.Configuration;
3using System.Data;
4using System.Text;
5using System.Web;
6using System.Web.UI;
7using System.Xml;
8
9
10public class FeedBase : Page
11{
12 public void GenerateRss()
13 {
14
15 IList<RssBase.ItemInfo> items = new List<RssBase.ItemInfo>();
16
17 // Populate items.
18 foreach (DataRow row in rows)
19 {
20 RssBase.ItemInfo item = new RssBase.ItemInfo(row["Title"].ToString(), "link", row["Description"].ToString(), row["PubDate"].ToString(), row[ "Author"].ToString(), "guid");
21 items.Add(item);
twenty two }
twenty three
24 XmlTextWriter xmlWriter = new XmlTextWriter(Response.OutputStream,
25 Encoding.UTF8);
26
27 RssBase rssBase = new RssBase(xmlWriter, false, items);
28 rssBase.WriteRSS();
29
30 xmlWriter.Flush();
31 xmlWriter.Close();
32
33 Response.ContentEncoding = Encoding.UTF8;
34 Response.ContentType = "text/xml";
35 Response.Cache.SetCacheability(HttpCacheability.Public);
36
37 Response.End();
38 }
39
40}
41
42
Finally, just create a new feed.aspx file, inherit the FeedBase class, and call the GenerateRss() method in this class to easily generate the RSS Feed you want :)
If you have any suggestions or ideas, please leave a message!
http://www.cnblogs.com/jerryhu/archive/2006/08/30/490544.html