2012-07-01 44 views
3

我想解析youtube頻道的原子提要。 這是rss原子提要的鏈接。用linq解析youtube提要

http://gdata.youtube.com/feeds/api/users/cokestudio/uploads?orderby=updated

List<YTFeeds> lstYT = new List<YTFeeds>(); 
XDocument xDocumentYT = XDocument.Load(Server.MapPath("XMLFile.xml")); 
XNamespace xmlns = "http://www.w3.org/2005/Atom"; 
lstYT.AddRange((from entry in xDocumentYT.Descendants(xmlns + "entry").Elements(xmlns + "media:group") 
         select new YTFeeds 
         { 
          Title = entry.Element(xmlns + "media:title").Value, 
          Description = entry.Element(xmlns + "media:description").Value, 
          Video = entry.Elements(xmlns + "media:player").ElementAt(1).Attribute("url").Value, 
          Image = entry.Elements(xmlns + "media:thumbnail").ElementAt(1).Attribute("url").Value 

         }).ToList()); 

我得到它說invalid character or hexcode ":"錯誤。我想從標記中獲取元素:<media:group> 請建議。

回答

4

使用名稱空間寫出元素的名稱時,必須省略前綴,它會爲您處理。在這種情況下,您需要一個單獨的命名空間實例才能獲取media元素。所以訪問標題,說明等應該是這樣的:

var doc = XDocument.Load(Server.MapPath(@"XMLFile.xml")); 
XNamespace xmlns = "http://www.w3.org/2005/Atom"; 
XNamespace media = "http://search.yahoo.com/mrss/"; 
var query = 
    from entry in doc.Root.Elements(xmlns + "entry") 
    let grp = entry.Element(media + "group") 
    select new YTFeeds 
    { 
     Title = (string)grp.Element(media + "title"), 
     Description = (string)grp.Element(media + "description"), 
     Video = (string)grp.Element(media + "player").Attribute("url"), 
     Image = grp.Elements(media + "thumbnail") 
      .Select(e => (string)e.Attribute("url")) 
      .First(), 
    }; 
var lstYT = query.ToList(); 
+0

謝謝Jeff Mercado .. –