2010-03-15 12 views
12

Próbuję przeciągnąć zawartość kanału RSS do obiektu, który można zmanipulować w kodzie. Wygląda na to, że klasy SyndicationFeed i SyndicationItem w .NET 3.5 zrobią to, czego potrzebuję, z wyjątkiem jednej rzeczy. Za każdym razem, gdy próbowałem odczytać zawartość kanału RSS przy użyciu klasy SyndicationFeed, element .Content dla każdego SyndicationItem ma wartość NULL.SyndicationItem.Content ma wartość Null

Uruchomiłem mój feed przez FeedValidator i próbowałem tego z kanałów z kilku innych źródeł, ale bezskutecznie.

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(); 

Podejrzewam, może po prostu nie być krok gdzieś, ale nie wydaje się znaleźć dobry tutorial jak konsumować RSS za pomocą tych klas.

EDYCJA: Dzięki SLAKSOM zorientowałem się, że problem dotyczy wykorzystania WordPress jako tagu treści. Nie wydaje się, że jest to problem z kanałami WP Atom, więc na razie będę to traktować jako rozwiązanie. Dzięki SLaks!

Odpowiedz

11

ten powinien dostać zawartości dla Ciebie:

SyndicationFeed feed = SyndicationFeed.Load(reader); 

string content = feed.ElementExtensions.ReadElementExtensions<string>("encoded", "http://purl.org/rss/1.0/modules/content/") 
+0

Dzięki Francis. Właśnie natknąłem się na to rozwiązanie na innym poście SO i rzeczywiście dało mi to, czego potrzebowałem. Właściwie to pomogło również rozwiązać dwa lub trzy inne problemy! – kdmurray

+0

działał po zmianie pliku feed.items – Dragon

1

Użyj właściwości Summary.

Kanał RSS, który został połączony, umieszcza jego zawartość w elemencie <description>.
As documented, element <description> z mapowania kanałów RSS na właściwość Summary.

+1

Podsumowanie nieruchomości dostarcza tylko niewielką ilość treści z kanału, prawda? – kdmurray

+0

Zawiera element ' '. – SLaks

+0

Ale chcę uzyskać pełny tekst artykułów/wpisów na blogu. Czy to źle? – kdmurray

4

Spójrz co zrobiłem:

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); 
    } 
+0

To wydaje się działać poprawnie dla strumieni atomów, niestety specyfikacja RSS pozwala na rozszerzenia, co jest treścią: zakodowaną rzeczą. Jest to poprawne i właśnie to zapobiega poprawnej pracy elementu item.content. – kdmurray

6

Its ze względu na fakt, że jest zadowolony: zamiast zakodowanej treści. Aby przeczytać treść w tym przypadku, zamierzam użyć tego: