覆盖syndicationfeed中的根元素,向根元素添加名称空间

本文关键字:元素 添加 空间 syndicationfeed 覆盖 | 更新日期: 2023-09-27 17:54:23

我需要在提要的rss(根)元素中添加新的名称空间,除了a10:

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

我使用序列化到RSS 2.0的SyndicationFeed类,并使用XmlWriter输出提要,

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

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

我试过在SyndicationFeed上添加AttributeExtensions,但它添加了新的命名空间到channel元素而不是根元素

Thank you

覆盖syndicationfeed中的根元素,向根元素添加名称空间

遗憾的是,该格式化程序不能按您需要的方式扩展。

您可以使用中间的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());