在XDocument中向元素添加元素

Ila*_*321 0 c# xml linq linq-to-xml

我一直在编写一个使用XML的数据库程序.每当程序引导并且在指定的路径中找不到XML文件时,它就会生成:

<!--  Studnet Database  -->
<schoolDB>
    <Grades>
        <Grade10/>
        <Grade11/>
        <Grade12/>
    </Grades>
    <Employees/>
</schoolDB>
Run Code Online (Sandbox Code Playgroud)

我希望程序在元素中添加一个element被调用者(提示用户输入10到12之间的等级,然后将其解析为Grade10 - > Grade12).我写了这个: studentGrade*

    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);
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它给了我一个错误:

StudentClone1.exe中出现未处理的"System.NullReferenceException"类型异常.附加信息:对象引用未设置为对象的实例.

这有什么不对?

Ser*_*kiy 6

这意味着您没有正确选择成绩元素:

doc.Element(toWriteGrade) // this returns null
Run Code Online (Sandbox Code Playgroud)

因此成绩是元素的Grades元素,你应该这样查询:

doc.Root.Element("Grades").Element(toWriteGrade)
Run Code Online (Sandbox Code Playgroud)

或者(效率较低)您可以查看文件中的所有元素:

doc.Descendants(toWriteGrade) 
Run Code Online (Sandbox Code Playgroud)