【问题标题】:How to get data from xml, by linq, c#如何通过 linq、c# 从 xml 获取数据
【发布时间】:2013-11-13 14:13:14
【问题描述】:

嗨,

我从 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>();

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

【问题讨论】:

  • “不进入 linq 查询”是什么意思?你的意思是它不会加载到 XDocument 中吗?您是否调试过线路上的内容?
  • 它不会在列表中添加任何内容,但我在那里找到了解决方案:stackoverflow.com/questions/11284114/… 感谢您的帮助!

标签: c# xml linq youtube microsoft-metro


【解决方案1】:

在 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 =&gt; e.LocalName == "feed")。我不确定是否有更优雅的方式来实现“命名空间不可知”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多