2013-11-04 93 views
0

我一直在編碼使用XML的數據庫程序。每當程序啓動和未找到指定路徑的XML文件,它會產生這樣的:將元素添加到XDocument中的元素

<!-- Studnet Database --> 
<schoolDB> 
    <Grades> 
     <Grade10/> 
     <Grade11/> 
     <Grade12/> 
    </Grades> 
    <Employees/> 
</schoolDB> 

我希望程序在Grade*元素添加一個名爲elementstudent(會提示用戶輸入等級從10到12,然後解析到10年級 - > 12年級)。我寫了這個:

XDocument doc = XDocument.Load(prog.dbFile); 
    doc.Element(toWriteGrade).Add(new XElement("student", 
      new XElement("name", name), 
      new XElement("age", age))); 
    doc.Save(prog.dbFile); 

當我運行它,它給了我一個錯誤:

An unhandled exception of type 'System.NullReferenceException' occurred in StudentClone1.exe` Additional information: Object reference not set to an instance of an object.

這裏有什麼問題?

回答

6

這意味着你沒有選擇正確級別的元素:

doc.Element(toWriteGrade) // this returns null 

這樣的成績Grades元素的元素,你應該詢問這樣說:

doc.Root.Element("Grades").Element(toWriteGrade) 

或(低效率),你可以只需查看文件中的所有元素:

doc.Descendants(toWriteGrade) 
+1

我以爲'Root'會把它寫到th e'schoolDB'元素,我想不是。感謝您的快速回復! – Ilan321

+0

@ Ilan321 node.Element方法只是檢查節點的直接子節點。這就是爲什麼你不能找到成績元素 - 它不存在於doc直接的孩子(只有根元素可以在那裏找到) –

+1

順便說一句我建議你使用一些'id'或'value'屬性來指定成績而不是改變名字的等級元素。即而不是''使用'