0

我想使用 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 元素之外,还有其他选择吗?

4

1 回答 1

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 所必需的)。

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 有效。通常,您只需在其中放置一个页面,说明提要的外观。

于 2014-01-23T10:02:14.120 回答