Запрос Linq to XML, возвращающий пустой список класса - PullRequest
0 голосов
/ 25 марта 2012

Я хочу использовать Linq, чтобы составить список фильмов, в которых был актер. В настоящее время я пытаюсь использовать этот запрос:

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

                         }).ToList<Actor>();

Но я получаю сообщение об ошибке, когда пытаюсь присвоить значение Фильмографии. Этот запрос возвращает список с одним элементом с пустой фильмографией. Как мне назначить эти ссылки в список? Я приложил значение 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 ]

2 голосов
/ 25 марта 2012

Вам необходимо извлечь атрибут href .Значение получит значение между тегом ссылки <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();
0 голосов
/ 25 марта 2012

Проблема в том, что ваш код предполагает, что существует одиночный элемент ссылки, но их много - также вы, вероятно, не хотите, чтобы его значение (которое пусто), например, атрибут title:

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

Выше предполагается, что свойство Filmography является List<string>, которое содержит названия фильмов.Это лучшее, что я могу сделать, если вы не показываете определение класса Actor и какие данные вы на самом деле хотели запросить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...