Ответ 1
Это должно получить контент для вас:
SyndicationFeed feed = SyndicationFeed.Load(reader);
string content = feed.ElementExtensions.ReadElementExtensions<string>("encoded", "http://purl.org/rss/1.0/modules/content/")
Я пытаюсь вытащить содержимое RSS-канала в объект, который можно манипулировать в коде. Похоже, что классы SyndicationFeed и SyndicationItem в .NET 3.5 будут делать то, что мне нужно, за исключением одного. Каждый раз, когда я пытался читать содержимое RSS-канала, используя класс SyndicationFeed, элемент .Content для каждого объекта SyndicationItem имеет значение null.
Я запустил свой канал через FeedValidator и попробовал это с помощью каналов из нескольких других источников, но безрезультатно.
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();
Я подозреваю, что я могу просто пропустить какой-то шаг, но я не могу найти хороший учебник о том, как использовать RSS-каналы, используя эти классы.
EDIT: Благодаря SLaks я понял, что проблема заключается в использовании WordPress в качестве тега контента. Кажется, это не проблема с каналами WP Atom, поэтому я пока займусь этим решением. Спасибо SLaks!
Это должно получить контент для вас:
SyndicationFeed feed = SyndicationFeed.Load(reader);
string content = feed.ElementExtensions.ReadElementExtensions<string>("encoded", "http://purl.org/rss/1.0/modules/content/")
Это связано с тем, что он содержит контент: закодирован вместо контента. Чтобы прочитать содержимое в этом случае, я собираюсь использовать это:
string content="";
foreach (SyndicationElementExtension ext in item.ElementExtensions)
{
if (ext.GetObject<XElement>().Name.LocalName == "encoded")
content = ext.GetObject<XElement>().Value;
}
Посмотрите, что я сделал:
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);
}
Используйте свойство Summary
.
RSS-канал, который вы связали, помещает его содержимое в элемент <description>
.
Как описано в документе, элемент <description>
канала RSS соответствует свойству Summary
.