SyndicationFeed将名称空间前缀从a10更改为atom

时间:2013-03-28 09:48:55

标签: c# .net rss

我正在使用System.ServiceModel.Syndication.SyndicationFeed来创建一个rss feed,我从中得到了这个:

<rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0"><channel>...</channel></rss>

除了我validate my feed之外,这一切都在游泳。

验证器抱怨a10名称空间前缀,并建议我使用atom代替。这听起来很合理..除了我看不到改变前缀的简单方法。

关于如何更改前缀的任何想法?

1 个答案:

答案 0 :(得分:20)

要为原子扩展指定自定义名称,您需要在Feed格式化程序上禁用SerializeExtensionsAsAtom:

var formatter = feed.GetRss20Formatter();
formatter.SerializeExtensionsAsAtom = false;

然后你需要添加命名空间

XNamespace atom = "http://www.w3.org/2005/Atom";

feed.AttributeExtensions.Add(new XmlQualifiedName("atom", XNamespace.Xmlns.NamespaceName), atom.NamespaceName);

现在您可以开始使用扩展程序

feed.ElementExtensions.Add(new XElement(atom + "link", new XAttribute("href", feedLink), new XAttribute("rel", "self"), new XAttribute("type", "application/rss+xml")));

最后将Feed写入响应流:

formatter.WriteTo(new XmlTextWriter(Response.Output));