我试图从使用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"元素。