Rss20FeedFormatter和RRS2扩展

时间:2014-01-20 14:52:46

标签: c# rss syndication-feed rss2

我想使用RSS2扩展功能将我自己的非标准元素添加到我的RSS源中,如下所述:

http://cyber.law.harvard.edu/rss/rss.html#extendingRss

但是我认为.Net Rss20FeedFormatter类不支持此功能。

我的代码看起来像这样:

public Rss20FeedFormatter GetRSS()
{
  var feed = new SyndicationFeed(....);
  feed.Items = new List<SyndicationItem>();
  // add items to feed
  return new Rss20FeedFormatter(feed);
}

如果它不支持,那么除了按元素创建XML元素之外还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

这是我的发现。我花了一段时间才弄明白。

这就是你要做的,你的饲料必须有一个命名空间

XNamespace extxmlns = "http://www.yoursite.com/someurl";
feed.AttributeExtensions.Add(new XmlQualifiedName("ext", XNamespace.Xmlns.NamespaceName), extxmlns.NamespaceName);
feed.ElementExtensions.Add(new XElement(extxmlns + "link", new XAttribute("rel", "self"), new XAttribute("type", "application/rss+xml")));
return new Rss20FeedFormatter(feed, false);

您的项目需要是派生类,并且您在WriteElementExtensions中编写扩展属性,确保在它们前面添加命名空间(您不必这样做,但这是使其成为有效RSS所需的内容)。 / p>

class TNSyndicationItem : SyndicationItem

protected override void WriteElementExtensions(XmlWriter writer, string version)
{
  writer.WriteElementString("ext:abstract", this.Abstract);
  writer.WriteElementString("ext:channel", this.Channel);
}

如果您查看RSS阅读器(如firefox),则忽略扩展属性,您还需要编写代码来阅读它们。

url http://www.yoursite.com/someurl不一定存在,但您需要它来定义命名空间并使RSS有效。通常情况下,您只需在其中放置一个页面,其中说明了Feed应该是什么样子。