我目前在尝试将XML元素导入类型为Books的列表时遇到问题。我在这段代码上收到一个“未设置为对象实例的对象引用”错误:
mybook.Title = p.Element("title").Value;
我是不正确地引用XML元素还是其他一些简单的事情?我通过无数的解决方案和主题搜索了几个小时,并且无法克服最后的障碍。
为简单起见,以下是一个文件中的代码:
class Program
{
static void Main(string[] args)
{
string appPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
FileInfo fi = new FileInfo(Path.Combine(appPath, "Books.xml"));
Console.WriteLine(GetBooks());
}
public class Books
{
public string ID { get; set; }
public string Name { get; set; }
public string Title { get; set; }
public decimal Price { get; set; }
public DateTime PublishDate { get; set; }
public string Description { get; set; }
}
public static List<Books> GetBooks()
{
XDocument doc = LinqToXml.XmlHelper.GetPlantDocument();
var xmlBooks = doc.Descendants("catalog");
List<Books> someBooks = new List<Books>();
foreach (var p in xmlBooks)
{
Books mybook = new Books();
mybook.Title = p.Element("title").Value;
someBooks.Add(mybook);
}
return someBooks;
}
}
这是XML文件的内容:
请注意,这确实是一个家庭作业项目。我不是在寻找一个直接的答案,因为我是一个或两个巨大的暗示。
答案 0 :(得分:1)
XElement doc=XElement.Load("c:\\hello.xml");
List<Books> lstBooks=doc.Elements("book").Select(x=>
new Books
{
ID=x.Attribute("id").Value,
Name=x.Element("author").Value,
Title =x.Element("title").Value,
Price =decimal.Parse(x.Element("price").Value),
PublishDate =Convert.ToDateTime(x.Element("publish_date").Value),
Description=x.Element("description").Value
}
).ToList();
//lstBooks now contain all the books
foreach(Books b in lstBooks)
{
b.ID;
b.Name;...........
}