我想使用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元素之外还有其他选择吗?
答案 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应该是什么样子。