2013-01-18 6 views
4

요소를 근절하기 위해 네임 스페이스를 추가 : 나는 직렬화 SyndicationFeed 클래스를 사용하고덮어 쓰기 루트 요소, A10뿐만 아니라, 내 피드의 RSS (루트) 요소에 새 네임 스페이스를 추가 할 필요가

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

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



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

나는 SyndicationFeed에 AttributeExtensions를 추가하는 시도하지만,

,536,913 루트 대신 채널 요소에 새 네임 스페이스를 를 추가, 2.0 RSS 및 I 출력 피드에 XmlWriter를 사용하기

감사합니다.

+0

은 어쩌면 당신은 임시 MemoryStream을 쓸 수 있습니다 :

이 코드는 최종 XML 출력의 루트 요소에 네임 스페이스를 추가합니다 필요. 그리고 나서 xml 콘텐츠를 출력에 작성하십시오. –

답변

3

불행히도 포맷터는 필요한 방식으로 확장 할 수 없습니다.

최종 출력에 쓰기 전에 중간 XmlDocument를 사용하여 수정할 수 있습니다. 당신이 어떤 문제를 해결할 수 있습니다 어디에을 XmlDocument의 내용을로드하기 위해,

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