Ich habe vor einiger Zeit einen RSS-Feed geschrieben.
Nach mehreren Modifikationen wurde der entsprechende Code in eine separate Klasse geschrieben.
Es fühlt sich sehr praktisch an, es wiederzuverwenden. Also habe ich es gepostet und es alle gemeinsam studieren lassen.
Das Folgende ist die RssBase.cs-Klasse:
1System verwenden;
2using System.Collections.Generic;
3using System.Xml;
4
5Namespace MyMedia.Utilities
6{
7 öffentliche Klasse RssBase
8 {
9 RssBase-Konstruktor#region RssBase-Konstruktor
10 öffentliche RssBase(XmlTextWriter rssWriter)
11 {
12 this.rssWriter = rssWriter;
13}
14 öffentliche RssBase(XmlTextWriter rssWriter, bool hasMedia, IList<ItemInfo> items)
15 {
16 this.rssWriter = rssWriter;
17 this.hasMedia = hasMedia;
18 this.items = Artikel;
19}
20 #endregion
einundzwanzig
22 [Serialisierbar]
23 öffentliche versiegelte Klasse ItemInfo
vierundzwanzig {
25 ItemInfo-Konstruktor#region ItemInfo-Konstruktor
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 Zeichenfolge itemGuid, Zeichenfolge mediaContentUrl, Zeichenfolge mediaTitle, Zeichenfolge mediaDescription,
38 Zeichenfolge mediaThumbUrl, Zeichenfolge mediaThumbWidth, Zeichenfolge mediaThumbHeight, Zeichenfolge 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 Interne Artikelvariablen#region Interne Artikelvariablen
57 // Artikelvariablen
58 private Zeichenfolge itemTitle;
59 private Zeichenfolge itemLink;
60 private Zeichenfolge itemDescription;
61 privater String itemPubDate = DateTime.Now.ToString("r");
62 privater String itemDateTaken = DateTime.Now.ToString();
63 private Zeichenfolge itemAuthor;
64 private Zeichenfolge itemGuid;
65 // Medienvariablen
66 private Zeichenfolge mediaContentUrl;
67 private Zeichenfolge mediaTitle;
68 private Zeichenfolge mediaDescription;
69 private Zeichenfolge mediaThumbUrl;
70 private Zeichenfolge mediaThumbWidth;
71 private Zeichenfolge mediaThumbHeight;
72 private Zeichenfolge mediaAuthor;
73 #endregion
74
75 Artikeleigenschaften#region Artikeleigenschaften
76 öffentliche Zeichenfolge ItemTitle
77 {
78 set { itemTitle = value;
79 get { return itemTitle }
80}
81 öffentliche Zeichenfolge ItemLink
82 {
83 set { itemLink = value;
84 get { return itemLink }
85}
86 öffentliche Zeichenfolge ItemDescription
87 {
88 set { itemDescription = value;
89 get { return itemDescription }
90}
91 öffentliche Zeichenfolge ItemPubDate
92 {
93 set { itemPubDate = value;
94 get { return itemPubDate;
95 }
96 öffentliche Zeichenfolge ItemDateTaken
97 {
98 set { itemDateTaken = value;
99 get { return itemDateTaken }
100}
101 öffentliche Zeichenfolge ItemAuthor
102 {
103 set { itemAuthor = value;
104 get { return itemAuthor }
105 }
106 öffentliche Zeichenfolge ItemGuid
107 {
108 set { itemGuid = value;
109 get { return itemGuid }
110 }
111 öffentliche Zeichenfolge MediaContentUrl
112 {
113 set { mediaContentUrl = value;
114 get { return mediaContentUrl }
115 }
116 öffentliche Zeichenfolge MediaTitle
117 {
118 set { mediaTitle = value;
119 get { return mediaTitle }
120 }
121 öffentliche Zeichenfolge MediaDescription
122 {
123 set { mediaDescription = value;
124 get { return mediaDescription }
125 }
126 öffentliche Zeichenfolge MediaThumbUrl
127 {
128 set { mediaThumbUrl = value;
129 get { return mediaThumbUrl }
130 }
131 öffentliche Zeichenfolge MediaThumbWidth
132 {
133 set { mediaThumbWidth = value;
134 get { return mediaThumbWidth;
135 }
136 öffentliche Zeichenfolge MediaThumbHeight
137 {
138 set { mediaThumbHeight = value;
139 get { return mediaThumbHeight }
140 }
141 öffentliche Zeichenfolge 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 privater Const-String BESCHREIBUNG = "Beschreibung";
156 private const string LANGUAGE = "en-us";
157 private const string COPYRIGHT = "Copyright 2006";
158 private const string GENERATOR = „MyMedia RSS Generator“;
159 privater Const-String IMAGE_URL = " 160 privater Const-String IMAGE_TITLE = "MyWii";
161 private const string IMAGE_LINK = " http://www.MyWii.com.au ";
162 privater String PUB_DATE = DateTime.Now.ToString("r");
163 privater String LAST_BUILD_DATE = DateTime.Now.ToString("r");
164
165 #endregion
166
167 Interne Mitgliedsvariablen#region Interne Mitgliedsvariablen
168 privater XmlTextWriter rssWriter;
169 privater Bool hasMedia;
170 private IList<ItemInfo>-Elemente;
171 #endregion
172
173 Eigenschaften#region Eigenschaften
174 öffentlicher XmlTextWriter RssWriter
175 {
176 set { rssWriter = value;
177 get { return rssWriter }
178 }
179 öffentlicher Bool HasMedia
180 {
181 set { hasMedia = value;
182 get { return hasMedia }
183}
184 öffentliche IList<ItemInfo>-Elemente
185 {
186 set { items = value;
187 get { Artikel zurückgeben }
188 }
189
190 #endregion
191
192 Private Methode#region Private Methode
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 // In Kanalblock schreiben
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", BESCHREIBUNG);
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("Sprache", LANGUAGE);
216 rssWriter.WriteString("n ");
217 rssWriter.WriteElementString("copyright", COPYRIGHT);
218 rssWriter.WriteString("n ");
219 rssWriter.WriteElementString("generator", GENERATOR);
220 rssWriter.WriteString("n ");
221 // In Bildblock schreiben
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 /**//// <Zusammenfassung>
235 /// Artikel eintragen
236 /// </summary>
237 private void WriteItem(ItemInfo item)
238 {
239 // In den Elementblock schreiben
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 // Artikelmedium hier schreiben
267
268 }
269
270 /**//// <Zusammenfassung>
271 /// In Artikelmedium schreiben
272 /// </summary>
273 /// <param name="item">ItemInfo-Element</param>
274 private void WriteItemMedia(ItemInfo item)
275 {
276 // In Medien schreiben
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 /**//// <Zusammenfassung>
305 /// Elementelement schließen
306 /// </summary>
307 private void WriteItemEnd()
308 {
309 rssWriter.WriteString("n ");
310 rssWriter.WriteEndElement();
311 rssWriter.WriteString("n ");
312 }
313
314 /**//// <Zusammenfassung>
315 /// Alle Elemente schließen
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 /**//// <Zusammenfassung>
328 /// RSS-Feed schreiben
329 /// </summary>
330 public void WriteRSS()
331 {
332 WritePrologue();
333 foreach (ItemInfo-Informationen in Artikeln)
334 {
335 WriteItem(info);
336 if (hasMedia)
337 WriteItemMedia(info);
338 WriteItemEnd();
339 }
340 WriteEnd();
341 }
342 }
343}
Verwenden Sie dann eine FeedBase.cs-Klasse, um die Methoden und Eigenschaften in der RssBase-Klasse oben aufzurufen. Der Code lautet wie folgt. (Diese Datei wurde geändert. Wenn Sie sie kompilieren möchten, müssen Sie entsprechende Änderungen vornehmen)
1using System.Collections.Generic;
2using System.Configuration;
3using System.Data;
4using System.Text;
5mit System.Web;
6mit System.Web.UI;
7using System.Xml;
8
9
10öffentliche Klasse FeedBase: Seite
11{
12 public void GenerateRss()
13 {
14
15 IList<RssBase.ItemInfo> items = new List<RssBase.ItemInfo>();
16
17 // Elemente füllen.
18 foreach (DataRow-Zeile in Zeilen)
19 {
20 RssBase.ItemInfo item = new RssBase.ItemInfo(row["Title"].ToString(), "link", row["Description"].ToString(), row["PubDate"].ToString(), row[ "Author"].ToString(), "guid");
21 Artikel.Add(item);
zweiundzwanzig }
dreiundzwanzig
24 XmlTextWriter xmlWriter = new XmlTextWriter(Response.OutputStream,
25 Codierung.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
Zum Schluss erstellen Sie einfach eine neue Datei „feed.aspx“, erben die Klasse „FeedBase“ und rufen die Methode „GenerateRss()“ in dieser Klasse auf, um ganz einfach den gewünschten RSS-Feed zu generieren :)
Wenn Sie Vorschläge oder Ideen haben, hinterlassen Sie bitte eine Nachricht!
http://www.cnblogs.com/jerryhu/archive/2006/08/30/490544.html