2012-07-20 133 views
0

我試圖從YouTube播放列表中獲取對YouTube視頻的描述。parse xml - 從播放列表中的視頻獲取YouTube描述

的XML播放列表看起來是這樣的:

<entry gd:etag="W/&quot;YhjhqeyM.&quot;"> 
    <title>My Title</title> 
    <media:group> 
    <media:description type="plain">My description</media:description> 
    </media:group> 
</entry> 
. 
. 
. 
...multiple entry elements 

我通過多個入口循環並獲得冠軍,像這樣:

var x = (from e in xmlFeed.Root.Elements().Where(n => n.Name.LocalName == "entry") select e); 


    foreach (XElement element in x) 
     { 
      title = element.Elements().Where(n => n.Name.LocalName == "title").FirstOrDefault().Value; 
      description = //??; 
     } 

我怎樣才能說明書中給出的上述格式?

感謝

+0

你可以給你在哪裏得到的XML樣本網址? – dtsg 2012-07-20 10:36:00

+0

@Duane,像這樣:https://gdata.youtube.com/feeds/api/playlists/63F0C78739B09958?v=2 – raklos 2012-07-20 10:42:59

回答

0
description = element.Descendants(XName.Get("description")).First().Value(); 
+0

這給出了一個錯誤:非可調用成員'System.Xml.Linq.XElement.Value'不能像方法一樣使用 – raklos 2012-07-20 10:43:39

+0

「值」是一個屬性,它應該在沒有()的情況下被調用。 description = element.Descendants(XName.Get(「description」))。First()。Value; – 2012-07-20 12:09:03

0

這做它,它給你,你是如何在您的文檔加載雖然。我已經在這種情況下HttpWebRequest/StreamReader讀它:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.Load(requestData("https://gdata.youtube.com/feeds/api/playlists/63F0C78739B09958?v=2")); 

var node = doc.DocumentNode.Descendants("media:description").ToList(); 

foreach (var description in node) 
{ 
    Response.Write(string.Format("Description: {0}\n",description.InnerText.ToString())); 
} 
+0

是否可以在沒有html敏捷包的情況下完成? – raklos 2012-07-20 10:57:14

+0

可能...但它使事情變得更容易。有沒有你不想使用它的原因? – dtsg 2012-07-20 10:59:20

0
XDocument xDoc = XDocument.Load("https://gdata.youtube.com/feeds/api/playlists/63F0C78739B09958?v=2"); 
XNamespace media = XNamespace.Get("http://search.yahoo.com/mrss/"); 
var descs = xDoc.Descendants(media + "description") 
    .Select(d => d.Value) 
    .ToArray();