2012-10-06 63 views
1

我目前遇到一個問題,試圖將我的XML元素導入到一個類型的書籍列表。我收到錯誤的這段代碼的「不設置到對象的實例對象引用」:導入XML到對象列表

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

請注意,這確實是一門功課的項目。我不是在尋找一個直接的答案,因爲我是一個巨大的提示或兩個。

+0

提示:將元素視爲路徑。您有「目錄」下所有元素的集合,但是您試圖跳過前進並獲得「標題」而不完成路徑。 – Tim

+0

另一個提示:你想要的是抓取「書」元素和他們的孩子的集合。如果你從'doc.Descendants(「Book」)開始,你可能會更容易得到「標題」,而不是抓住「目錄」下的所有孩子。 – Tim

+0

啊。那是我之前嘗試的,我的錯誤。此問題與ID以及標題等其他元素一起出現。 – user1721879

回答

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