SyndicationItem.Content为Null

kdm*_*ray 13 c# rss syndication-feed syndication-item

我正在尝试将RSS提要的内容提取到可以在代码中操作的对象中.看起来.NET 3.5中的SyndicationFeed和SyndicationItem类将完成我的需要,除了一件事.每次我尝试使用SyndicationFeed类读取RSS提要的内容时,每个SyndicationItem的.Content元素都为null.

我通过FeedValidator运行我的Feed,并尝试使用来自其他几个来源的Feed,但无济于事.

XmlReader xr = XmlReader.Create("http://shortordercode.com/feed/");
SyndicationFeed feed = SyndicationFeed.Load(xr);

foreach (SyndicationItem item in feed.Items)
{
    Console.WriteLine(item.Title.Text);
    Console.WriteLine(item.Content.ToString());
}

Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

我怀疑我可能只是在某个地方错过了一个步骤,但我似乎无法找到关于如何使用这些类消费RSS提要的好教程.

编辑:感谢SLaks我已经发现问题是WordPress使用内容标签.这似乎不是WP Atom提要的问题所以我现在将其作为解决方案.谢谢SLaks!

Fra*_*han 12

这应该为您获取内容:

SyndicationFeed feed = SyndicationFeed.Load(reader);

string content = feed.ElementExtensions.ReadElementExtensions<string>("encoded", "http://purl.org/rss/1.0/modules/content/")
Run Code Online (Sandbox Code Playgroud)


Max*_*ali 6

这是因为它是内容:编码而不是内容.要阅读本案例中的内容,我将使用此:

    string content="";
    foreach (SyndicationElementExtension ext in item.ElementExtensions)
    {
        if (ext.GetObject<XElement>().Name.LocalName == "encoded")
            content = ext.GetObject<XElement>().Value;
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

看看我做了什么:

    XmlReader reader = XmlReader.Create("http://kwead.com/blog/?feed=atom");
    SyndicationFeed feed = SyndicationFeed.Load(reader);
    reader.Close();

    foreach (SyndicationItem item in feed.Items)
    {
        string data = item.PublishDate.ToString();
        DateTime dt = Convert.ToDateTime(data);

        string titulo = " - " + item.Title.Text + "<br>";
        string conteudo = ((TextSyndicationContent)item.Content).Text;

        Response.Write(dt.ToString("d"));
        Response.Write(titulo);
        Response.Write(conteudo);
     }
Run Code Online (Sandbox Code Playgroud)