備忘録

備忘録

C#でRSS 1.0のFeedを読む

Ⅰ. はじめに

.NET Framework 3.5以降であれば Atom 1.0 と RSS 2.0を対象にした SyndicationFeed があるのですが、RSS 1.0はサポートされていません。
RSS 1.0 を手書きで解析するときのメモです。

Ⅱ. プログラム

解析対象のXMLGIGAZINEのRSS1.0のFeedを利用しました)
https://gist.github.com/anonymous/19883bc8c892ca8f8ceaa5937257a83e

static void Main(string[] args)
{
  var xml = new XmlDocument();

  xml.Load("http://feed.rssad.jp/rss/gigazine/rss_1.0");

  var nsmgr = new XmlNamespaceManager(xml.NameTable);
  nsmgr.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
  nsmgr.AddNamespace("rss", "http://purl.org/rss/1.0/");
  nsmgr.AddNamespace("dc", "http://purl.org/dc/elements/1.1/");

  foreach (XmlElement node in xml.SelectNodes("/rdf:RDF/rss:item", nsmgr))
  {
    var title = node.SelectNodes("rss:title", nsmgr)[0].InnerText;
    var link = node.SelectNodes("rss:link", nsmgr)[0].InnerText;
    var description = node.SelectNodes("rss:description", nsmgr)[0].InnerText;
    var date = DateTime.Parse(node.SelectNodes("dc:date", nsmgr)[0].InnerText);

    Console.WriteLine("-------");
    Console.WriteLine($"title: {title}");
    Console.WriteLine($"link: {link}");
    Console.WriteLine($"description: {description}");
    Console.WriteLine($"date: {date}");
  }
}

Ⅲ. 実行結果

f:id:kagasu:20170122230022p:plain