2013-03-28 25 views
10

Tôi đang sử dụng System.ServiceModel.Syndication.SyndicationFeed để tạo ra một nguồn cấp rss từ mà tôi có được điều này:SyndicationFeed thay đổi namespace prefix từ a10 để Atom

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

Đó là tất cả làm việc thuận buồm xuôi, trừ khi tôi validate my feed .

Trình xác thực khiếu nại về tiền tố không gian tên a10 và cho thấy tôi sử dụng nguyên tử thay thế. Nghe có vẻ hợp lý .. ngoại trừ tôi không thể nhìn thấy một cách đơn giản thay đổi tiền tố.

Bất kỳ ý tưởng nào về cách thay đổi tiền tố?

+0

Đó có vẻ như bạn đã thực sự đầu ra thức ăn của bạn như RSS 2.0, không Atom 1.0 - xem các ví dụ đầu ra XML khác nhau tại http://msdn.microsoft.com/en-us/library/system. servicemodel.syndication.syndicationfeed.aspx # code-snippet-3 – CBroe

+1

Vâng nó là rss, đó là những gì tôi đang mong đợi. Vì lý do nào đó trình xác nhận nguồn cấp dữ liệu cho thấy có liên kết quay lại tự sử dụng không gian tên nguyên tử nên tôi chỉ cố gắng tuân thủ điều đó. Đang thêm liên kết như thế này - nhưng sau đó trình xác thực muốn a10 là nguyên tử. –

+0

Cảnh báo của trình xác thực chỉ là một gợi ý. Không có lý do gì bạn * không nên * thay đổi tiền tố, nhưng không có trình phân tích cú pháp hợp lệ nào quan tâm đến sự khác biệt. – Joe

Trả lời

18

Để chỉ định một tên tùy chỉnh cho các phần mở rộng nguyên tử bạn cần phải vô hiệu hóa SerializeExtensionsAsAtom trên formatter thức ăn chăn nuôi:

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

Sau đó, bạn cần phải thêm namespace

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

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

Và bây giờ bạn có thể bắt đầu sử dụng các tiện ích mở rộng

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

Cuối cùng ghi nguồn cấp dữ liệu vào strea phản hồi m:

formatter.WriteTo(new XmlTextWriter(Response.Output)); 
Các vấn đề liên quan