19 janvier 2009

Générer un flux RSS avec LinQ To XML

LinQ To XML permet de manipuler les fichiers et les flux XML. C'est la dernière API XML de Microsoft et celle-ci offre l'avantage d'être beaucoup plus facile à utiliser que XmlTextReader/XmlTextWriter, grâce à son style fonctionnel.

Dernièrement, j'ai du générer quelques flux RSS pour un projet Sharepoint. Je me suis donc servi de LinQ To XML pour créer les flux en question.

Voici donc le code nécessaire pour générer un flux RSS avec LinQ To XML :


public class ItemRSS
{
    public string Titre { get; set; }
    public string Lien { get; set; }
    public string Description { get; set; }
    public string Auteur { get; set; }
    public string Date { get; set; }
    public string Source { get; set; }
    public string Catégorie { get; set; }
    public string Guid { get; set; }
}

public static string BuildRSS(string pTitreRSS, 
                              string pLienRSS, 
                              string pDescription, 
                              string pLanguage,
                              string pPubDate,
                              string pDerniereDate,
                              string pNomGenerateur,
                              string pMailResponsable,
                              IEnumerable<ItemRSS> pListeItems)
{
    XDocument xdoc = new XDocument(
                        new XDeclaration("1.0", "UTF-8", "yes"),
                        new XElement("rss",
                            new XElement("channel",
                                new XElement("title", pTitreRSS),
                                new XElement("link", pLienRSS),
                                new XElement("description", pDescription),
                                new XElement("language", pLanguage),
                                new XElement("pubDate",pPubDate),
                                new XElement("lastBuildDate",pDerniereDate),
                                new XElement("generator", pNomGenerateur),
                                new XElement("webMaster",pMailResponsable),
                                from item in pListeItems
                                select new XElement("item",
                                    new XElement("title", item.Titre),
                                    new XElement("link", item.Lien),
                                    new XElement("description", new XCData(item.Description)),
                                    new XElement("author", item.Auteur),
                                    new XElement("pubDate", item.Date),
                                    new XElement("guid", item.Lien),
                                    new XElement("source",item.Source),
                                    new XElement("category",item.Catégorie))),
                            new XAttribute("version", "2.0")));
    return xdoc.ToString();
}

La classe ItemRSS représente un item du flux RSS et chaque propriété publique représente un élément de l'item.

La méthode statique BuildRSS prend en paramètre quelques valeurs définissant les éléments enfants de l'élément channel d'un flux RSS et prend aussi en paramètre la liste des items contenus dans le flux RSS.

En une seule instruction, celle du constructeur de la classe XDocument, la méthode BuildRSS construit l'intégralité du flux RSS. Un élément XML du style <title>titre</title> est représenté par l'instruction suivante : new XElement("title","titre"). Une déclaration XML est représentée par la classe Xdeclaration et un attribut par XAttribute.

Les classes XDocument et XElement peuvent aussi prendre en paramètre dans leur constructeur un tableau d'objets (params object[]), ce qui permet facilement de définir les enfants d'un élément XML.

Vous trouverez ci-dessous un exemple d'application Console utilisant ce code pour générer un flux RSS (nécessite Visual Studio 2008).

1 commentaire:

Thomas Levesque a dit…

On peut aussi faire ça avec la classe SyndicationFeed...