2012-01-27 84 views
0

我想閱讀使用LINQ到XML的堆棧溢出rss飼料。我無法獲取入口節點,因爲它正在返回空列表。這個我已經嘗試過了,有沒有人可以指出我在這裏做錯了什麼?如何閱讀使用LINQ的XML Stackoverflow RSS訂閱

在這裏,我結合網格視圖:

private void StackoverflowFeedList() 
{ 
    grdFeedView.DataSource = StackoverflowUtils.GetStackOverflowFeeds(); 
    grdFeedView.DataBind(); 
} 

這是會得到該方法的所有提要:

public static IEnumerable<StackOverflowFeedItems> GetStackOverflowFeeds() 
{ 
    XNamespace Snmp = "http://www.w3.org/2005/Atom"; 
    XDocument RssFeed = XDocument.Load(@"http://stackoverflow.com/feeds"); 
    var posts = from item in RssFeed.Descendants("entry") 
       select new StackOverflowFeedItems 
       { 
        QuestionID = item.Element(Snmp +"id").Value, 
        QuestionTitle = item.Element(Snmp +"title").Value, 
        AuthorName = item.Element(Snmp +"name").Value, 
        CategoryTag = (from category in item.Elements(Snmp +"category") 
            orderby category 
            select category.Value).ToList(), 
        CreatedDate = DateTime.Parse(item.Element(Snmp +"published").Value), 
        QuestionSummary = item.Element(Snmp +"summary").Value 
       }; 
    return posts.ToList(); 
} 

這是我使用綁定類:

public class StackOverflowFeedItems 
{ 
    public string QuestionID { get; set; } 
    public string QuestionTitle { get; set; } 
    public IEnumerable<string> CategoryTag { get; set; } 
    public string AuthorName { get; set; } 
    public DateTime CreatedDate { get; set; } 
    public string QuestionSummary { get; set; } 
} 
+0

爲什麼你不想對SyndicationFeed類使用「經典」方法? http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.syndicationfeed.aspx – 2012-01-27 10:12:07

回答

4

您沒有使用您聲明的名稱空間變量。嘗試使用

RssFeed.Descendants(Snmp + "entry") 

(27:11 那裏你指的是特定名稱的所有其他地方。)

我並不是說這是必然你需要解決什麼都,但這是最明顯的問題。您還應考慮使用XElementXAttribute的顯式轉換,而不是Value屬性,例如,

CreatedDate = (DateTime) item.Element(Snmp +"published") 

我也鼓勵你更加關注縮進,並且在命名局部變量時一致地使用pascalCase。 (爲什麼命名空間變量被稱爲Snmp是另一個奇怪的...剪切和粘貼?)

+0

我添加了Snmp,但它沒有返回任何東西。空的結果,檢查我編輯的問題 – 2012-01-27 10:17:25

+0

@Ravi:你還沒有在第一次調用時使用它:'RssFeed.Descendants(「entry」)'。 – 2012-01-27 10:20:00

+0

你的是老鷹的眼睛;) – 2012-01-27 10:22:58