覆盖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
遗憾的是,该格式化程序不能按您需要的方式扩展。
您可以使用中间的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());