2014-01-20 9 views
0

Я хочу использовать RSS2 расширения функцию, чтобы добавить свои собственные нестандартные элементы на мой канал, как описано здесь:Rss20FeedFormatter и RRS2 расширения

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

Я думаю, что это может помочь: http://msdn.microsoft.com/en-us/library/vstudio/bb924494(v=vs.100).aspx –

ответ

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 не обязательно должен существовать, но вам необходимо определить пространство имен и сделать его действительным. Обычно вы просто ставите страницу, в которой говорится о том, как должен выглядеть фид.

+0

С момента написания этого документа я обнаружил, что добавление пространства имен в качестве второй аргумент более правильный: writer.WriteElementString ("abstract", NamespaceString, this.Abstract()); –