J'écrivais un flux RSS il y a quelque temps.
Après plusieurs modifications, le code correspondant a été écrit dans une classe distincte.
C'est assez pratique à réutiliser. Je l'ai donc posté et j'ai laissé tout le monde l'étudier ensemble.
Voici la classe RssBase.cs :
1en utilisant le système ;
2en utilisant System.Collections.Generic ;
3en utilisant System.Xml ;
4
5espace de noms MyMedia.Utilities
6{
7 classes publiques RSSBase
8 {
9 Constructeur RssBase#region Constructeur RssBase
10 RssBase publique (XmlTextWriter rssWriter)
11 {
12 this.rssWriter = rssWriter;
13}
14 RssBase publics (éléments XmlTextWriter rssWriter, bool hasMedia, IList<ItemInfo>)
15 {
16 this.rssWriter = rssWriter;
17 this.hasMedia = hasMedia;
18 this.items = articles ;
19}
20 #endregion
vingt-et-un
22 [Sérialisable]
23 classes scellées publiques ItemInfo
vingt-quatre {
25 Constructeur ItemInfo#region Constructeur ItemInfo
26 ItemInfo public() { }
27 public ItemInfo (chaîne itemTitle, chaîne itemLink, chaîne itemDescription, chaîne itemPubDate, chaîne itemAuthor, chaîne 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 (chaîne itemTitle, chaîne itemLink, chaîne itemDescription, chaîne itemPubDate, chaîne itemAuthor,
37 chaîne itemGuid, chaîne mediaContentUrl, chaîne mediaTitle, chaîne mediaDescription,
38 chaîne mediaThumbUrl, chaîne mediaThumbWidth, chaîne mediaThumbHeight, chaîne 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 Variables d'élément internes#region Variables d'élément internes
57 // Variables d'article
58 chaîne privée itemTitle ;
59 chaîne privée itemLink ;
60 chaîne privée itemDescription ;
61 chaîne privée itemPubDate = DateTime.Now.ToString("r");
62 chaîne privée itemDateTaken = DateTime.Now.ToString();
63 chaîne privée itemAuthor ;
64 chaîne privée itemGuid ;
65 // Variables multimédia
66 chaîne privée mediaContentUrl ;
67 chaînes privées mediaTitle ;
68 chaînes privées mediaDescription ;
69 chaîne privée mediaThumbUrl ;
70 chaînes privées mediaThumbWidth ;
71 chaîne privée mediaThumbHeight ;
72 chaînes privées mediaAuthor ;
73 #endregion
74
75 Propriétés de l'article#region Propriétés de l'article
76 chaîne publique ItemTitle
77 {
78 définir { itemTitle = valeur }
79 obtenir { return itemTitle }
80}
81 chaîne publique ItemLink
82 {
83 définir { itemLink = valeur }
84 obtenir { return itemLink }
85}
86 chaîne publique ItemDescription
87 {
88 définir { itemDescription = valeur }
89 obtenir { return itemDescription }
90}
91 chaîne publique ItemPubDate
92 {
93 set { itemPubDate = valeur }
94 obtenir { return itemPubDate }
95 }
96 chaîne publique ItemDateTaken
97 {
98 set { itemDateTaken = valeur }
99 obtenir { return itemDateTaken }
100}
101 chaîne publique ItemAuthor
102 {
103 set { itemAuthor = valeur }
104 obtenir { return itemAuthor }
105 }
106 chaîne publique ItemGuid
107 {
108 définir { itemGuid = valeur }
109 obtenir { return itemGuid }
110 }
111 chaîne publique MediaContentUrl
112 {
113 set { mediaContentUrl = valeur }
114 obtenir { return mediaContentUrl }
115 }
116 chaîne publique MediaTitle
117 {
118 définir { mediaTitle = valeur }
119 obtenir { return mediaTitle }
120 }
121 chaîne publique MediaDescription
122 {
123 définir { mediaDescription = valeur }
124 obtenir { return mediaDescription }
125 }
126 chaîne publique MediaThumbUrl
127 {
128 définir { mediaThumbUrl = valeur }
129 obtenir { return mediaThumbUrl }
130 }
131 chaîne publique MediaThumbWidth
132 {
133 définir { mediaThumbWidth = valeur }
134 obtenir { return mediaThumbWidth }
135 }
136 chaîne publique MediaThumbHeight
137 {
138 set { mediaThumbHeight = valeur }
139 obtenir { return mediaThumbHeight }
140 }
141 chaîne publique MediaAuthor
142 {
143 set { mediaAuthor = valeur }
144 obtenir { return mediaAuthor }
145 }
146 #endregion
147
148 }
149
150 Chaîne Const#région Chaîne Const
151 chaîne const privée TITLE = "MyMedia RSS";
152 chaîne const privée XMLNS_MEDIA = " http://www.MyWii.com.au ";
153 chaîne const privée XMLNS_DC = " http://purl.org/dc/elements/1.1/ ";
154 chaîne const privée LINK = " http://www.MyWii.com.au/ ";
155 chaîne const privée DESCRIPTION = "description";
156 chaîne const privée LANGUAGE = "en-us";
157 chaîne const privée COPYRIGHT = "Copyright 2006";
158 chaîne const privée GENERATOR = "MyMedia RSS Generator";
159 chaîne const privée IMAGE_URL = " 160 chaîne const privée IMAGE_TITLE = "MyWii";
161 chaîne const privée IMAGE_LINK = " http://www.MyWii.com.au ";
162 chaîne privée PUB_DATE = DateTime.Now.ToString("r");
163 chaîne privée LAST_BUILD_DATE = DateTime.Now.ToString("r");
164
165 #endregion
166
167 Variables membres internes#region Variables membres internes
168 XmlTextWriter privé rssWriter ;
169 booléens privés hasMedia ;
170 éléments privés IList<ItemInfo> ;
171 #endregion
172
173 Propriétés#région Propriétés
174 XmlTextWriter public RssWriter
175 {
176 définir { rssWriter = valeur }
177 obtenir { return rssWriter }
178 }
179 booléens publics HasMedia
180 {
181 définir { hasMedia = valeur }
182 obtenir { return hasMedia }
183}
184 éléments publics IList<ItemInfo>
185 {
186 ensemble { éléments = valeur }
187 obtenir { retourner les articles ; }
188 }
189
190 #endregion
191
192 Méthode privée#region Méthode privée
193
194 vide privé 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 // Écrire dans le bloc de canal
203 rssWriter.WriteStartElement("canal");
204 rssWriter.WriteString("n ");
205 rssWriter.WriteElementString("titre", TITRE);
206 rssWriter.WriteString("n ");
207 rssWriter.WriteElementString("lien", LIEN);
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("langue", LANGUE);
216 rssWriter.WriteString("n ");
217 rssWriter.WriteElementString("copyright", COPYRIGHT);
218 rssWriter.WriteString("n ");
219 rssWriter.WriteElementString("générateur", GÉNÉRATEUR);
220 rssWriter.WriteString("n ");
221 // Ecrire dans le bloc image
222 rssWriter.WriteStartElement("image");
223 rssWriter.WriteString("n ");
224 rssWriter.WriteElementString("url", IMAGE_URL);
225 rssWriter.WriteString("n ");
226 rssWriter.WriteElementString("titre", IMAGE_TITLE);
227 rssWriter.WriteString("n ");
228 rssWriter.WriteElementString("lien", IMAGE_LINK);
229 rssWriter.WriteString("n ");
230 rssWriter.WriteEndElement();
231 rssWriter.WriteString("n ");
232 }
233
234 /**//// <résumé>
235 /// Écrire dans les éléments
236 /// </summary>
237 vide privé WriteItem (élément ItemInfo)
238 {
239 // Écrire dans le bloc d'éléments
240 rssWriter.WriteStartElement("élément");
241 rssWriter.WriteString("n ");
242 rssWriter.WriteElementString("titre", item.ItemTitle);
243 rssWriter.WriteString("n ");
244 rssWriter.WriteElementString("lien", 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("auteur", 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 // Écrire ici le média de l'élément
267
268 }
269
270 /**//// <résumé>
271 /// Écrire dans le support d'élément
272 /// </summary>
273 /// <param name="item">Elément ItemInfo</param>
274 vide privé WriteItemMedia (élément ItemInfo)
275 {
276 // Écrire dans les médias
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("hauteur", item.MediaThumbHeight);
293 rssWriter.WriteAttributeString("largeur", item.MediaThumbWidth);
294 rssWriter.WriteEndElement();
295 rssWriter.WriteString("n ");
296 rssWriter.WriteStartElement("media:crédit");
297 rssWriter.WriteAttributeString("role", "photographe");
298 rssWriter.WriteString(item.MediaAuthor);
299 rssWriter.WriteEndElement();
300 rssWriter.WriteString("n ");
301
302 }
303
304 /**//// <résumé>
305 /// Clôture d'un élément d'élément
306 /// </summary>
307 vide privé WriteItemEnd()
308 {
309 rssWriter.WriteString("n ");
310 rssWriter.WriteEndElement();
311 rssWriter.WriteString("n ");
312 }
313
314 /**//// <résumé>
315 /// Ferme tous les éléments
316 /// </summary>
317 vide privé WriteEnd()
318 {
319 rssWriter.WriteEndElement();
320 rssWriter.WriteString("n");
321 rssWriter.WriteEndElement();
322 rssWriter.WriteEndDocument();
323 }
324
325 #endregion
326
327 /**//// <résumé>
328 /// Écrire un flux RSS
329 /// </summary>
330 public vide WriteRSS()
331 {
332 ÉcrirePrologue();
333 foreach (informations ItemInfo dans les articles)
334 {
335 WriteItem (informations);
336 si (hasMedia)
337 WriteItemMedia (informations);
338 WriteItemEnd();
339 }
340 WriteEnd();
341 }
342 }
343}
Utilisez ensuite une classe FeedBase.cs pour appeler les méthodes et propriétés de la classe RssBase ci-dessus. Le code est le suivant. (Ce fichier a été modifié. Si vous souhaitez le compiler, vous devez apporter les modifications appropriées)
1en utilisant System.Collections.Generic;
2en utilisant System.Configuration ;
3en utilisant System.Data ;
4en utilisant System.Text ;
5en utilisant System.Web ;
6en utilisant System.Web.UI ;
7en utilisant System.Xml ;
8
9
10classe publique FeedBase : Page
11{
12 vide public GenerateRss()
13 {
14
15 éléments IList<RssBase.ItemInfo> = new List<RssBase.ItemInfo>();
16
17 // Remplir les éléments.
18 foreach (ligne DataRow en lignes)
19 {
20 RssBase.ItemInfo item = new RssBase.ItemInfo(row["Title"].ToString(), "link", row["Description"].ToString(), row["PubDate"].ToString(), row[ "Auteur"].ToString(), "guid");
21 éléments.Add(élément);
vingt-deux }
vingt-trois
24 XmlTextWriter xmlWriter = nouveau XmlTextWriter(Response.OutputStream,
25 Encodage.UTF8);
26
27 RssBase rssBase = new RssBase(xmlWriter, false, items);
28 rssBase.WriteRSS();
29
30 xmlWriter.Flush();
31 xmlWriter.Close();
32
33 Réponse.ContentEncoding = Encoding.UTF8 ;
34 Réponse.ContentType = "text/xml";
35 Response.Cache.SetCacheability(HttpCacheability.Public);
36
37 Réponse.End();
38 }
39
40}
41
42
Enfin, créez simplement un nouveau fichier feed.aspx, héritez de la classe FeedBase et appelez la méthode GenerateRss() dans cette classe pour générer facilement le flux RSS souhaité :)
Si vous avez des suggestions ou des idées, laissez un message !
http://www.cnblogs.com/jerryhu/archive/2006/08/30/490544.html