SyndicationFeed изменить префикс пространства имен от a10 до атома

Я использую System.ServiceModel.Syndication.SyndicationFeed для создания rss-канала, из которого я получаю следующее:

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

Все работает плавно, за исключением случаев, когда я проверяю фид.

Валидатор жалуется на префикс пространства имен a10 и предполагает, что вместо этого я использую атом. Это звучит разумно.. за исключением того, что я не вижу прямого способа изменения префикса.

Любые идеи о способах изменения префикса?

Ответ 1

Чтобы указать пользовательское имя для расширений атома, вам необходимо отключить 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")));

Наконец, напишите канал в поток ответов:

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