2013-01-18 99 views
4

我需要新的命名空间添加到我的饲料的RSS(根)元素,除了A10:覆写根元素,添加命名空间根元素

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

我使用SyndicationFeed类序列化到RSS 2.0和我使用的XmlWriter输出馈送,

var feed = new SyndicationFeed(
        feedDefinition.Title, 
        feedDefinition.Description, 
    . 
    . 
    . 



using (var writer = XmlWriter.Create(context.HttpContext.Response.Output, settings)) 
     { 
      rssFormatter.WriteTo(writer); 
     } 

我曾尝试添加上SyndicationFeed AttributeExtensions但它增加了新的命名空间 给信道元件代替根,

谢谢

+0

也许你可以写一个临时的MemoryStream,以加载内容的XmlDocument的,你可以解决什么你想。只有这样,才能将xml内容写入输出 –

回答

3

不幸的是,格式化程序无法以您需要的方式扩展。

在写入最终输出之前,可以使用中间XmlDocument并对其进行修改。

此代码将一个命名空间添加到最终的XML输出的根元素:

var feed = new SyndicationFeed("foo", "bar", new Uri("http://www.example.com")); 
var rssFeedFormatter = new Rss20FeedFormatter(feed); 

// Create a new XmlDocument in order to modify the root element 
var xmlDoc = new XmlDocument(); 

// Write the RSS formatted feed directly into the xml doc 
using(var xw = xmlDoc.CreateNavigator().AppendChild()) 
{ 
    rssFeedFormatter.WriteTo(xw); 
} 

// modify the document as you want 
xmlDoc.DocumentElement.SetAttribute("xmlns:example", "www.example.com"); 

// now create your writer and output to it: 
var sb = new StringBuilder(); 
using (XmlWriter writer = XmlWriter.Create(sb)) 
{ 
    xmlDoc.WriteTo(writer); 
} 

Console.WriteLine(sb.ToString()); 
+0

谢谢,这就是我一直在寻找的东西,尽管我没有使用StringBuilder,而只是使用了我的XmlWriter.Create(context.HttpContext.Response.Output,settings)。 – Amin