C# 向XDocument中的元素添加元素
我一直在编写一个使用XML的数据库程序。每当程序启动并且在指定的路径上找不到XML文件时,它都会生成以下内容:C# 向XDocument中的元素添加元素,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我一直在编写一个使用XML的数据库程序。每当程序启动并且在指定的路径上找不到XML文件时,它都会生成以下内容: <!-- Studnet Database --> <schoolDB> <Grades> <Grade10/> <Grade11/> <Grade12/> </Grades> <Employees/> </s
<!-- Studnet Database -->
<schoolDB>
<Grades>
<Grade10/>
<Grade11/>
<Grade12/>
</Grades>
<Employees/>
</schoolDB>
当我运行此命令时,它会给我一个错误:
StudentClone1.exe中发生类型为“System.NullReferenceException”的未处理异常`
其他信息:对象引用未设置为
反对
这里有什么问题?这意味着您没有正确选择年级元素:
doc.Element(toWriteGrade) // this returns null
因此,等级是grades
元素的元素,您应该这样查询:
doc.Root.Element("Grades").Element(toWriteGrade)
或者(效率较低),您可以查看文件中的所有元素:
doc.Descendants(toWriteGrade)
这意味着您没有正确选择坡度元素:
doc.Element(toWriteGrade) // this returns null
因此,等级是grades
元素的元素,您应该这样查询:
doc.Root.Element("Grades").Element(toWriteGrade)
或者(效率较低),您可以查看文件中的所有元素:
doc.Descendants(toWriteGrade)
我以为
Root
会将其写入schoolDB
元素,我想不会。谢谢你的快速回复@Ilan321节点。元素方法只检查节点的直接子节点。这就是为什么你找不到grade元素的原因-它在doc直接子元素中不存在(在那里只能找到根元素)。顺便说一句,我建议你使用一些id
或value
属性来指定等级,而不是更改等级元素的名称。也就是说,我想Root
会将它写入schoolDB
元素,而不是
使用。谢谢你的快速回复@Ilan321节点。元素方法只检查节点的直接子节点。这就是为什么你找不到grade元素的原因-它在doc直接子元素中不存在(在那里只能找到根元素)。顺便说一句,我建议你使用一些id
或value
属性来指定等级,而不是更改等级元素的名称。即使用