用Linq to 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");

根据搜索,这些"工作"节点(和随后的子节点)可以多次出现。对于每次出现的"work",我想提取标题/作者/图像值来构建一个简单的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语句。谢谢。

经过几次小修改后,它可以为我工作:

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

null值是指null引用异常吗?我看到,在你的代码中,你正在寻找一个"image_url"元素,但在你的示例中有一个"image"元素。

相关内容

  • 没有找到相关文章

最新更新