使用Linq到Xml构建对象列表

时间:2011-04-13 16:57:33

标签: xml linq

我正在尝试使用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',我想提取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>();

但是我一直得到一个null引用异常。我将非常感谢任何指示我出错的地方。

凯文。

修改

大家好,结果问题是XML文件,而不是linq语句。感谢。

2 个答案:

答案 0 :(得分:0)

以null值表示空引用异常是什么意思?我在你的代码中看到你正在寻找一个“image_url”元素,但在你的样本中有一个“image”元素。

答案 1 :(得分:0)

经过几次小修改后,它对我有用:

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