2012-04-11 8 views
1

Ich füge ein paar einfachen Tags zu meinem SyndicationItem Inhalt Objekt wieSyndicationItem Inhalt < > ist codiert < & gt

"<p>Hello World</p>" 

aber es wird in dem RSS-Feed als

"&lt;p&gtHello World&lt;/p&gt" 

Ich habe versucht, gezeigt verschiedene Möglichkeiten, dies zu vermeiden, aber keine funktioniert.

Antwort

0

Ich habe eine Reihe von Lösungen hier gesehen, dass die Arbeit mit alten Versionen von .net angeboten:

SyndicationFeed: Content as CDATA?

Neben einer Nachverarbeitung Lösung hier:

https://gist.github.com/davidwhitney/1027181

Die Die erste Lösung war für mich nicht praktikabel, da wir die neueste Version von .net verwenden, und die zweite sah nach viel Aufwand für etwas so Einfaches aus, so dass ich letztendlich implementiert habe diese Lösung:

public class XmlCDataWriter : XmlTextWriter 
     { 
      public XmlCDataWriter(TextWriter w): base(w){} 

      public XmlCDataWriter(Stream w, Encoding encoding): base(w, encoding){} 

      public XmlCDataWriter(string filename, Encoding encoding): base(filename, encoding){} 

      public override void WriteString(string text) 
      { 
       if (text.Contains("<")) 
       { 
        base.WriteCData(text); 
       } 
       else 
       { 
        base.WriteString(text); 
       } 
      } 

     } 

Und dann die Klasse zu verwenden:

public StringBuilder CDataOverwiriteMethod(Rss20FeedFormatter formatter) 
     { 
      var buffer = new StringBuilder(); 

      //could be streamwriter as well 
      using (var stream = new StringWriter(buffer)) 
      { 
       using (var writer = new XmlCDataWriter(stream)) 
       { 
        var settings = new XmlWriterSettings() {Indent = true}; 

        using (var xmlWriter = XmlWriter.Create(writer, settings)) 
        { 
         formatter.WriteTo(xmlWriter); 
        } 
       } 
      } 

      return buffer; 
     }