5

你好,

我从 youtube xml 获取数据时遇到问题: youtube xml 的地址: http://gdata.youtube.com/feeds/api/videos?q=keyword&orderby= viewCount

我试试这个,但程序没有进入 linq 查询。

key = @"http://gdata.youtube.com/feeds/api/videos?q="+keyword+@"&orderby=viewCount";
youtube = XDocument.Load(key);
urls = (from item in youtube.Elements("feed")
       select new VideInfo
       {
            soundName = item.Element("entry").Element("title").ToString(),
            url = item.Element("entry").Element("id").ToString(),
       }).ToList<VideInfo>();

任何人都有想法,如何解决这个问题?谢谢!

4

1 回答 1

3

在 Linq to XML 中搜索元素要求您完全符合命名空间的条件。在这种情况下:

var keyword = "food";
var key = @"http://gdata.youtube.com/feeds/api/videos?q="+keyword+@"&orderby=viewCount";
var youtube = XDocument.Load(key);
var urls = (from item in youtube.Elements("{http://www.w3.org/2005/Atom}feed")
            select new
            {
                soundName = item.Element("{http://www.w3.org/2005/Atom}entry").Element("{http://www.w3.org/2005/Atom}title").ToString(),
                url = item.Element("{http://www.w3.org/2005/Atom}entry").Element("{http://www.w3.org/2005/Atom}id").ToString(),
            });
foreach (var t in urls) {
    Console.WriteLine(t.soundName + " " + t.url);
}

为我工作。为了避免写出命名空间,一种选择是按本地名称搜索(例如youtube.Elements().Where(e => e.LocalName == "feed")。我不确定是否有更优雅的方式来实现“命名空间不可知”。

于 2013-11-02T14:09:42.873 回答