2012-07-20 159 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(); 
相关问题