SyndicationFeed:内容为CDATA?

Han*_*fer 4 asp.net rss syndication-feed syndication-item

我正在使用.NET的SyndicationFeed来创建RSS和ATOM提要.不幸的是,我需要在描述元素(SyndicationItem的Content属性)中使用HTML内容,格式化程序会自动对HTML进行编码,但我宁愿将整个描述元素包装在CDATA中,而不对HTML进行编码.

我的(简单)代码:

var feed = new SyndicationFeed("Title", "Description", 
               new Uri("http://someuri.com"));
var items = new List<SyndicationItem>();

var item = new SyndicationItem("Item Title", (string)null, 
               new Uri("http://someitemuri.com"));

item.Content = SyndicationContent.CreateHtmlContent("<b>Item Content</b>");

items.Add(item);
feed.Items = items;
Run Code Online (Sandbox Code Playgroud)

有人知道如何使用SyndicationFeed做到这一点吗?我的最后一招是"手动"为feed创建XML,但我宁愿使用内置的SyndicationFeed.

小智 8

这对我有用:

public class CDataSyndicationContent : TextSyndicationContent
{
    public CDataSyndicationContent(TextSyndicationContent content)
        : base(content)
    {}

    protected override void  WriteContentsTo(System.Xml.XmlWriter writer)
    {
        writer.WriteCData(Text);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以:

new CDataSyndicationContent(new TextSyndicationContent(content, TextSyndicationContentKind.Html))
Run Code Online (Sandbox Code Playgroud)

  • 我尝试过相同的操作 - 新的CDataSyndicationContent(new TextSyndicationContent("<img rel="nofollow noreferrer" src = \"image.jpg \"/> <br /> <br />"+ d.Description,TextSyndicationContentKind.Html)); 但它仍然编码html?在遍历代码时,WriteContentsTo永远不会被调用. (13认同)