Linq to XML查询返回一个类的空列表

时间:2012-03-25 05:37:17

标签: xml linq-to-xml

我想使用Linq帮助制作演员所在的电影列表。我目前正在尝试使用此查询:

XDocument doc = XDocument.Load(reqUrl);
            var items = (from c in doc.Descendants("filmography")
                         select new Actor
                         {
                             Filmograpgy = c.Element("link").Value,

                         }).ToList<Actor>();

但是当我尝试为Filmography分配值时出现错误。此查询返回一个列表,其中包含一个带有空白影片的元素。如何将这些链接分配给列表?我附上了c的价值。

 <filmography>
   <link href="http://api.netflix.com/catalog/titles/movies/70213511" rel="http://schemas.netflix.com/catalog/title" title="Rock of Ages"></link>
   <link href="http://api.netflix.com/catalog/titles/movies/70173048" rel="http://schemas.netflix.com/catalog/title" title="Mission: Impossible - Ghost Protocol"></link>
   <link href="http://api.netflix.com/catalog/titles/movies/70127226" rel="http://schemas.netflix.com/catalog/title" title="Knight and Day"></link>
   <link href="http://api.netflix.com/catalog/titles/movies/70125259" rel="http://schemas.netflix.com/catalog/title" title="Together: The Hendrick Motorsports Story"></link>
</filmography>

2 个答案:

答案 0 :(得分:2)

您需要取出href attribute。值将获得链接标记<link>VALUE</link>之间的值。

你需要:

c.Element("link").Attribute("href")

此外,您只获得一个值,因为您正在根据根节点(影片学)的选择执行选择。

<filmography> 
    <link>THIS WILL GET PICKED IN THE ORIGINAL QUERY</link>
    <link>THIS WILL BE IGNORED</link>
    <link>THIS WILL BE IGNORED</link>
    <link>THIS WILL BE IGNORED</link>
</filmography>   

如果您需要每个链接,那么您需要让查询找到这些元素,然后从每个链接中选择所需的

c.Elements("link")
    .Select(c=>c.Attribute("href").Value)
    .ToList();

答案 1 :(得分:0)

问题是你的代码假定有一个单个链接元素,但有很多 - 你也可能不希望它的值(它是空的),但是title属性:

 Filmography = c.Elements("link")
                .Select(x => x.Attribute("title").Value)
                .ToList();

上面假设Filmography属性是List<string>,其中包含电影标题。鉴于您没有显示Actor的类定义以及您实际要查询的数据,这是我能做的最好的。