使用c#Xdocument类添加子节点

我有一个xml文件,如下所示。

    

我想添加子元素文件:使用xDocument.So的字符,我的最终xml将如下所示

     value0  Description0    value1  Description1    

下面给出了使用Xdocument类尝试的c#中的代码。

  XNamespace ns = "test"; Document = XDocument.Load(Folderpath + "\\File.test"); if (Document.Descendants(ns + "Characters") != null) { Document.Add(new XElement(ns + "Character")); } Document.Save(Folderpath + "\\File.test"); 

在行“ Document.Add(new XElement(ns + "Character")); ”,我收到一个错误:

"This operation would create an incorrectly structured document."

如何在“ file:Characters ”下添加节点。

您正在尝试添加一个额外的file:Character元素直接添加到根目录中。 你不想这样做 – 你想把它添加到file:Characters元素,大概是。

另请注意, Descendants() 永远不会返回null – 如果没有匹配的元素,它将返回一个空序列。 所以你要:

 var ns = "test"; var file = Path.Combine(folderPath, "File.test"); var doc = XDocument.Load(file); // Or var characters = document.Root.Element(ns + "Characters") var characters = document.Descendants(ns + "Characters").FirstOrDefault(); if (characters != null) { characters.Add(new XElement(ns + "Character"); doc.Save(file); } 

请注意,我使用了更常规的命名, Path.Combine ,并且还移动了Save调用,这样如果您实际对文档进行了更改,则最终只会保存。

  Document.Root.Element("Characters").Add(new XElement("Character", new XAttribute("ID", "File0"), new XElement("Value", "value0"), new XElement("Description")), new XElement("Character", new XAttribute("ID", "File1"), new XElement("Value", "value1"), new XElement("Description"))); 

注意:为简洁起见,我没有包含命名空间。 你必须添加这些。