2013-01-18 2 views
4

j'ai besoin d'ajouter de nouveaux espaces de noms au flux élément (racine) de mon alimentation, en plus de a10:élément racine Écraser dans syndicationfeed, Ajout d'espaces de noms à l'élément racine

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

J'utilise une classe SyndicationFeed sérialisé à RSS 2.0 et j'utiliser un XmlWriter pour produire l'alimentation,

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



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

J'ai essayé d'ajouter AttributeExtensions sur SyndicationFeed mais il ajoute les nouveaux espaces de noms à l'élément de canal au lieu de la racine,

Merci

+0

Peut-être que vous pouvez écrire à un MemoryStream temporaire, afin de charger le contenu dans un XmlDocument où vous pouvez corriger tout ce que vous vouloir. Et seulement ensuite, écrire le contenu xml à la sortie –

Répondre

3

Malheureusement, le formateur n'est pas extensible comme vous le souhaitez.

Vous pouvez utiliser un XmlDocument intermédiaire et le modifier avant d'écrire dans la sortie finale.

Ce code ajoutera un espace de nom à l'élément racine de la sortie xml finale:

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

Merci, c'est ce que je cherchais, bien que je n'aie pas utilisé le StringBuilder, à la place, j'ai juste utilisé mon XmlWriter.Create (context.HttpContext.Response.Output, settings). – Amin

Questions connexes