#xml #linq
#xml #linq
Вопрос:
Я пытаюсь извлечь значения из XML-файла, используя linq для создания списка объектов. XML-файл выглядит следующим образом.
<RootNode>
<Node1>
<Node2>
<results>
<work>
<title>title1</title>
<author>author</author>
<image_url>image</image_url>
</work>
...
</RootNode>
XDocument results = XDocument.Load("url");
В зависимости от поиска может быть несколько вхождений этих «рабочих» узлов (и последующих дочерних узлов). Для каждого вхождения ‘work’ я хочу извлечь значения title / author / image для создания простого объекта book:
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
public string ImageUrl { get; set; }
}
Теперь я могу перебирать XML-файл и выбирать отдельные значения, используя что-то вроде этого:
foreach (XElement element in results.Descendants("title"))
{
string title = element.Value;
}
но поскольку я хочу создать список книг, я пробовал разные вещи, очень похожие на это:
List<Book> books =
(from book in results.Descendants("work")
select new Book
{
Title = book.Element("title").Value,
Author = book.Element("name").Value,
ImageUrl = book.Element("image_url").Value,
}).ToList<Book>();
Однако я продолжаю получать исключение с нулевой ссылкой для этого. Любые указания на то, где я ошибаюсь, были бы весьма признательны.
Кевин.
Редактировать
Привет, ребята, оказывается, проблема была в XML-файле, а не в инструкции linq. Спасибо.
Ответ №1:
У меня это работает после нескольких незначительных изменений:
var books = (from book in results.Descendants("work")
select new Book
{
Title = book.Element("title").Value,
Author = book.Element("author").Value,
ImageUrl = book.Element("image").Value,
}).ToList();
Комментарии:
1. Привет, спасибо за ваш ответ. Да, то, что у меня есть, выглядит правильным для меня, однако я продолжаю получать это исключение с нулевой ссылкой, которое не было обработано пользователем. Это очень странно, поскольку я могу точно выделить один элемент, как показано в цикле foreach.
Ответ №2:
Под нулевым значением вы подразумеваете исключение нулевой ссылки? Я вижу, что в вашем коде вы ищете элемент «image_url», но в вашем примере есть элемент «image».