Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向XDocument中的元素添加元素_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

C# 向XDocument中的元素添加元素

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

我一直在编写一个使用XML的数据库程序。每当程序启动并且在指定的路径上找不到XML文件时,它都会生成以下内容:

<!--  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
属性来指定等级,而不是更改等级元素的名称。即使用