Перезапись корневого элемента в канале синдикации, добавление пространств имен в корневой элемент

Мне нужно добавить новые пространства имен в элемент rss(root) моей ленты в дополнение к 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);
        }

Я попытался добавить AttributeExtensions в SyndicationFeed, но он добавляет новые пространства имен в элемент канала вместо корня,

Спасибо


person Amin    schedule 18.01.2013    source источник
comment
Возможно, вы можете записать во временный поток памяти, чтобы загрузить содержимое в XmlDocument, где вы можете исправить все, что хотите. И только потом выводить содержимое xml на вывод   -  person Steve B    schedule 18.01.2013


Ответы (1)


К сожалению, форматер не расширяется так, как вам нужно.

Вы можете использовать промежуточный 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());
person jedigo    schedule 18.01.2013
comment
Спасибо, это то, что я искал, хотя я не использовал StringBuilder, а просто использовал свой XmlWriter.Create(context.HttpContext.Response.Output, settings). - person Amin; 21.01.2013