2013-03-28 41 views
10

我使用System.ServiceModel.Syndication.SyndicationFeed創建一個RSS feed從我得到這個:SyndicationFeed改變命名空間前綴原子

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

這是所有工作順順當當的,除了當我validate my feed

驗證器抱怨a10命名空間前綴,並建議我改用atom。這聽起來很合理......除了我看不到改變前綴的簡單方法。

有關更改前綴方式的任何想法?

+0

這看起來像你有實際輸出供稿作爲RSS 2.0,而不是1.0 ATOM - 看到不同的XML輸出示例在http://msdn.microsoft.com/en-us/library/system。 servicemodel.syndication.syndicationfeed.aspx#code-snippet-3 – CBroe 2013-03-28 10:11:16

+1

是的,它是rss,這是我所期待的。無論出於何種原因,Feed驗證器建議使用原子名稱空間鏈接到自我,所以我只是試圖堅持。我添加了這樣的鏈接 - 但驗證者希望a10成爲原子。 – 2013-03-28 10:20:27

+0

驗證器的警告只是一個建議。沒有理由你不應該改變前綴,但沒有有效的解析器關心這種差異。 – Joe 2013-03-28 12:01:17

回答

18

要爲您需要在飼料格式化禁用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"))); 

最後將訂閱源寫入響應鏈L:

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