Некоторое время назад я писал RSS-канал.
После нескольких модификаций соответствующий код был вынесен в отдельный класс.
Повторное использование кажется довольно удобным. Поэтому я опубликовал это и позволил всем изучить его вместе.
Ниже приведен класс RssBase.cs:
1использование системы;
2с использованием System.Collections.Generic;
3с использованием System.Xml;
4
5пространство имен MyMedia.Utilities
6{
7 общедоступный класс RssBase
8 {
9 Конструктор RssBase#регион Конструктор RssBase
10 общедоступных RssBase (XmlTextWriter rssWriter)
11 {
12 this.rssWriter = rssWriter;
13}
14 общедоступных RssBase (XmlTextWriter rssWriter, bool hasMedia, элементы IList
15 {
16 this.rssWriter = rssWriter;
17 this.hasMedia = hasMedia;
18 this.items = предметы;
19}
20 #конечныйрегион
двадцать один
22 [Сериализуемый]
23 общедоступный запечатанный класс ItemInfo
двадцать четыре {
25 Конструктор ItemInfo#регион Конструктор ItemInfo
26 публичный ItemInfo() { }
27 public ItemInfo (строка itemTitle, строка itemLink, строка itemDescription, строка itemPubDate, строка itemAuthor, строка 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(строка itemTitle, строка itemLink, строка itemDescription, строка itemPubDate, строка itemAuthor,
37 строка itemGuid, строка mediaContentUrl, строка mediaTitle, строка mediaDescription,
38 строка mediaThumbUrl, строка mediaThumbWidth, строка mediaThumbHeight, строка 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 #конецрегиона
55
56 Внутренние переменные элемента #region Внутренние переменные элемента
57 // Переменные элемента
58 частная строка itemTitle;
59 частная строка itemLink;
60 частная строка itemDescription;
61 частная строка itemPubDate = DateTime.Now.ToString("r");
62 частная строка itemDateTaken = DateTime.Now.ToString();
63 частная строка itemAuthor;
64 частная строка itemGuid;
65 // Медиа-переменные
66 частная строка mediaContentUrl;
67 частная строка mediaTitle;
68 частная строка mediaDescription;
69 частная строка mediaThumbUrl;
70 частная строка mediaThumbWidth;
71 частная строка mediaThumbHeight;
72 частная строка mediaAuthor;
73 #конецрегиона
74
75 Свойства элемента#регион Свойства элемента
76 публичная строка ItemTitle
77 {
78 набор {itemTitle = значение};
79 получить {вернуть itemTitle;
80}
81 публичная строка ItemLink
82 {
83 набор {itemLink = значение};
84 получить {вернуть ссылку элемента};
85}
86 публичная строка ItemDescription
87 {
88 набор { itemDescription = значение };
89 получить {вернуть описание элемента};
90}
91 публичная строка ItemPubDate
92 {
93 набор {itemPubDate = значение};
94 получить {вернуть itemPubDate};
95 }
96 публичная строка ItemDateTaken
97 {
98 набор { itemDateTaken = значение };
99 получить {вернуть itemDateTaken};
100}
101 публичная строка ItemAuthor
102 {
103 набор {itemAuthor = значение};
104 получить {вернуть itemAuthor;
105 }
106 публичная строка ItemGuid
107 {
108 набор { itemGuid = значение }
109 получить {вернуть itemGuid};
110 }
111 публичная строка MediaContentUrl
112 {
113 набор {mediaContentUrl = значение};
114 получить {вернуться mediaContentUrl;
115 }
116 публичная строка MediaTitle
117 {
118 набор {mediaTitle = значение};
119 получить {вернуться mediaTitle;
120 }
121 публичная строка MediaDescription
122 {
123 набор {mediaDescription = значение};
124 получить {вернуться mediaDescription};
125 }
126 публичная строка MediaThumbUrl
127 {
128 набор {mediaThumbUrl = значение};
129 получить {вернуться mediaThumbUrl;
130 }
131 публичная строка MediaThumbWidth
132 {
133 набор {mediaThumbWidth = значение};
134 получить {вернуться mediaThumbWidth;
135 }
136 публичная строка MediaThumbHeight
137 {
138 набор {mediaThumbHeight = значение};
139 получить {вернуться mediaThumbHeight;
140 }
141 публичная строка MediaAuthor
142 {
143 набор {mediaAuthor = значение};
144 получить {вернуться mediaAuthor;
145 }
146 #конечныйрегион
147
148 }
149
150 Константная строка#регион Константная строка
151 частная константная строка TITLE = "MyMedia RSS";
152 частная константная строка XMLNS_MEDIA = " http://www.MyWii.com.au ";
153 частная константная строка XMLNS_DC = " http://purl.org/dc/elements/1.1/ ";
154 частная константная строка LINK = " http://www.MyWii.com.au/ ";
155 частная константная строка DESCRIPTION = "описание";
156 частная константная строка LANGUAGE = "en-us";
157 Private const string COPYRIGHT = "Авторское право 2006";
158 Private const string GENERATOR = "Генератор RSS MyMedia";
159 частная константная строка IMAGE_URL = " 160 частная константная строка IMAGE_TITLE = "MyWii";
161 частная константная строка IMAGE_LINK = " http://www.MyWii.com.au ";
162 частная строка PUB_DATE = DateTime.Now.ToString("r");
163 частная строка LAST_BUILD_DATE = DateTime.Now.ToString("r");
164
165 #конечныйрегион
166
167 Внутренние переменные-члены #region Внутренние переменные-члены
168 частный XmlTextWriter rssWriter;
169 частное bool hasMedia;
170 частных элементов IList
171 #конецрегиона
172
173 Свойства#Свойства региона
174 общедоступный XmlTextWriter RssWriter
175 {
176 набор { rssWriter = значение };
177 получить {вернуться rssWriter};
178 }
179 общедоступный логический HasMedia
180 {
181 набор {hasMedia = значение};
182 получить {вернуться HasMedia;
183}
184 общедоступных элемента IList
185 {
186 набор {предметы = значение};
187 получить {возврат предметов};
188 }
189
190 #конецрегиона
191
192 Частный метод#регион Частный метод
193
194 частная пустота WritePrologue()
195 {
196 rssWriter.WriteStartDocument();
197 rssWriter.WriteStartElement("rss");
198 rssWriter.WriteAttributeString("версия", "2.0");
199 rssWriter.WriteAttributeString("xmlns:media", XMLNS_MEDIA);
200 rssWriter.WriteAttributeString("xmlns:dc", XMLNS_DC);
201 rssWriter.WriteString("n ");
202 // Запись в блок канала
203 rssWriter.WriteStartElement("канал");
204 rssWriter.WriteString("n ");
205 rssWriter.WriteElementString("заголовок", TITLE);
206 rssWriter.WriteString("n ");
207 rssWriter.WriteElementString("ссылка", ССЫЛКА);
208 rssWriter.WriteString("n ");
209 rssWriter.WriteElementString("описание", ОПИСАНИЕ);
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);
216 rssWriter.WriteString("n ");
217 rssWriter.WriteElementString("авторское право", COPYRIGHT);
218 rssWriter.WriteString("n ");
219 rssWriter.WriteElementString("генератор", ГЕНЕРАТОР);
220 rssWriter.WriteString("n ");
221 // Запись в блок изображения
222 rssWriter.WriteStartElement("изображение");
223 rssWriter.WriteString("n ");
224 rssWriter.WriteElementString("url", IMAGE_URL);
225 rssWriter.WriteString("n ");
226 rssWriter.WriteElementString("заголовок", IMAGE_TITLE);
227 rssWriter.WriteString("n ");
228 rssWriter.WriteElementString("ссылка", IMAGE_LINK);
229 rssWriter.WriteString("n ");
230 rssWriter.WriteEndElement();
231 rssWriter.WriteString("n ");
232 }
233
234 /**//// <сводка>
235 /// Запись по пунктам
236 ///
237 Private void WriteItem (элемент ItemInfo)
238 {
239 // Запись в блок элемента
240 rssWriter.WriteStartElement("элемент");
241 rssWriter.WriteString("n ");
242 rssWriter.WriteElementString("title", item.ItemTitle);
243 rssWriter.WriteString("n ");
244 rssWriter.WriteElementString("ссылка", item.ItemLink);
245 rssWriter.WriteString("n ");
246
247 rssWriter.WriteStartElement("описание");
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("автор", item.ItemAuthor);
259 rssWriter.WriteString("n ");
260 rssWriter.WriteStartElement("руководство");
261 rssWriter.WriteAttributeString("isPermaLink", "false");
262 rssWriter.WriteString(item.ItemGuid);
263 rssWriter.WriteEndElement();
264
265
266 // Запишите сюда элемент media
267
268 }
269
270 /**//// <сводка>
271 /// Запись в элементе media
272 ///
273 /// Элемент ItemInfo
274 Private void WriteItemMedia (элемент ItemInfo)
275 {
276 // Напишите в СМИ
277 rssWriter.WriteString("n ");
278 rssWriter.WriteStartElement("медиа:контент");
279 rssWriter.WriteAttributeString("url", item.MediaContentUrl);
280 rssWriter.WriteAttributeString("тип", "изображение/jpeg");
281 rssWriter.WriteEndElement();
282 rssWriter.WriteString("n ");
283 rssWriter.WriteElementString("media:title", item.MediaTitle);
284 rssWriter.WriteString("n ");
285 rssWriter.WriteStartElement("медиа:текст");
286 rssWriter.WriteAttributeString("тип", "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("высота", item.MediaThumbHeight);
293 rssWriter.WriteAttributeString("ширина", item.MediaThumbWidth);
294 rssWriter.WriteEndElement();
295 rssWriter.WriteString("n ");
296 rssWriter.WriteStartElement("медиа:кредит");
297 rssWriter.WriteAttributeString("роль", "фотограф");
298 rssWriter.WriteString(item.MediaAuthor);
299 rssWriter.WriteEndElement();
300 rssWriter.WriteString("n ");
301
302 }
303
304 /**//// <сводка>
305 /// Закрыть элемент элемента
306 /// сводка>
307 частная пустота WriteItemEnd()
308 {
309 rssWriter.WriteString("n ");
310 rssWriter.WriteEndElement();
311 rssWriter.WriteString("n ");
312 }
313
314 /**//// <сводка>
315 /// Закрываем все элементы
316 /// сводка>
317 частная пустота WriteEnd()
318 {
319 rssWriter.WriteEndElement();
320 rssWriter.WriteString("n");
321 rssWriter.WriteEndElement();
322 rssWriter.WriteEndDocument();
323 }
324
325 #конечныйрегион
326
327 /**//// <сводка>
328 /// Запись RSS-канала
329 /// сводка>
330 публичная недействительность WriteRSS()
331 {
332 НаписатьПролог();
333 foreach (информация ItemInfo в элементах)
334 {
335 WriteItem (информация);
336 если (hasMedia)
337 WriteItemMedia(информация);
338 WriteItemEnd();
339 }
340 ЗаписьКонец();
341 }
342 }
343}
Затем используйте класс FeedBase.cs для вызова методов и свойств приведенного выше класса RssBase. Код следующий. (Этот файл был изменен. Если вы хотите его скомпилировать, вам необходимо внести соответствующие изменения)
1с помощью System.Collections.Generic;
2использование System.Configuration;
3использование System.Data;
4использование System.Text;
5использование System.Web;
6использование System.Web.UI;
7использование System.Xml;
8
9
10публичный класс FeedBase: страница
11{
12 публичная пустота GenerateRss()
13 {
14
15 элементов IList
16
17 // Заполнение элементов.
18 foreach (строка DataRow в строках)
19 {
20 RssBase.ItemInfo item = new RssBase.ItemInfo(row["Title"].ToString(), "link", row["Description"].ToString(), row["PubDate"].ToString(), row[ "Автор".ToString(), "руководство");
21 элемент.Добавить(элемент);
двадцать два }
двадцать три
24 XmlTextWriter xmlWriter = новый XmlTextWriter(Response.OutputStream,
25 Кодировка.UTF8);
26
27 RssBase rssBase = новый RssBase(xmlWriter, false, items);
28 rssBase.WriteRSS();
29
30 xmlWriter.Flush();
31 xmlWriter.Close();
32
33 Response.ContentEncoding = Encoding.UTF8;
34 Response.ContentType = "текст/xml";
35 Response.Cache.SetCacheability(HttpCacheability.Public);
36
37 Ответ.Конец();
38 }
39
40}
41
42
Наконец, просто создайте новый файл Feed.aspx, унаследуйте класс FeedBase и вызовите метод GenerateRss() в этом классе, чтобы легко сгенерировать нужный RSS-канал :)
Если у вас есть какие-либо предложения или идеи, пожалуйста, оставьте сообщение!
http://www.cnblogs.com/jerryhu/archive/2006/08/30/490544.html