使用Linq到Xml构建对象列表

问题描述

| 我正在尝试使用linq从XML文件提取值来创建对象列表。 XML文件如下所示。
<RootNode>
  <Node1>
     <Node2>
        <results>
           <work>
              <title>title1</title>
              <author>author</author>
              <image_url>image</image_url>
            </work>
    ...
</RootNode>

XDocument results = XDocument.Load(\"url\");
这些“工作”节点(和后续的子节点)可能会多次出现,具体取决于搜索。对于“工作”的每次出现,我想提取标题/作者/图像值以构建一个简单的书本对象:
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语句。谢谢。     

解决方法

经过几次小的修改,它对我有用:
    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();
    ,空值是指空引用异常吗?我看到在您的代码中您正在寻找一个\“ image_url \”元素,但是在您的示例中有一个\“ image \”元素。