将XML导入对象列表

时间:2012-10-06 03:06:43

标签: c# xml list object

我目前在尝试将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文件的内容:

http://pastebin.com/ZVmWqRT1

请注意,这确实是一个家庭作业项目。我不是在寻找一个直接的答案,因为我是一个或两个巨大的暗示。

1 个答案:

答案 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;...........
}