我正在尝试使用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语句。感谢。
答案 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();