Voici une méthode permetant d'écrire un flux RSS à partir de Linq to XML et Linq to SQL. Les données proviennent d'une source Linq to SQL dont voici le schéma :
Et Voici le code C# :
/// <summary>
/// Description résumée de Rss
/// </summary>
public class Feeds
{
/// <summary>
/// Ecriture du flux RSS
/// </summary>
public static void Write()
{
String path = HttpContext.Current.Server.MapPath("...path.../blog.rss"); // Avec path : chemin du flux
String url = String.Concat("...path.../fichier.aspx?id="); // Avec path et fichier pour désigner le fichier qui permetra d'avoir un lien vers la page du post
XDocument document = new XDocument(
new XDeclaration("1.0", "utf-8", null),
new XElement("rss",
new XElement("channel",
new XElement("title", "Nom du site"),
new XElement("link", "Url du site"),
new XElement("pubDate", Date2RFC822(DateTime.Now)),
new XElement("lastBuildDate", Date2RFC822(DateTime.Now)),
from p in new DataContext().Post.OrderByDescending(c => c.date_edition).Take(10)
select new XElement("item",
new XElement("guid", p.id_post.ToString()),
new XElement("pubDate", Date2RFC822(p.date_edition)),
new XElement("title", p.titre),
new XElement("description", p.texte),
new XElement("link", String.Concat(url, p.id_post.ToString()))
)
)
,
new XAttribute("version", "2.0"))
);
//Stream d'écriture du fichier
System.IO.TextWriter writer = new System.IO.StreamWriter(path, false, Encoding.Default);
document.Save(writer);
writer.Flush();
writer.Close();
}
/// <summary>
/// Formatage de date
/// </summary>
/// <param name="date"></param>
/// <returns></returns>
private static String Date2RFC822(DateTime date)
{
Int32 offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours;
StringBuilder sb = new StringBuilder();
sb.Append(date.ToString("ddd, dd MMM yyyy HH:mm:ss "));
if (offset < 0)
{
sb.AppendFormat("-{0:00}00", offset * -1);
}
else if (offset == 0)
{
sb.Append("GMT");
}
else
{
sb.AppendFormat("+{0:00}00", offset);
}
return sb.ToString();
}
}