[英]Adding child nodes using c# Xdocument class
I have an xml file as given below. 我有一个xml文件,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<file:Situattion xmlns:file="test">
<file:Properties>
</file:Situattion>
I would like to add the child element file:Character using xDocument.So that my final xml would be like given below 我想添加子元素文件:使用xDocument.So的字符,我的最终xml将如下所示
<?xml version="1.0" encoding="utf-8"?>
<file:Situattion xmlns:file="test">
<file:Characters>
<file:Character file:ID="File0">
<file:Value>value0</file:Value>
<file:Description>
Description0
</file:Description>
</file:Character>
<file:Character file:ID="File1">
<file:Value>value1</file:Value>
<file:Description>
Description1
</file:Description>
</file:Character>
</file:Characters>
Code in c# i tried using Xdocument class is given below. 下面给出了使用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");
At line " Document.Add(new XElement(ns + "Character"));
", I am getting an error: 在行“ Document.Add(new XElement(ns + "Character"));
”,我收到一个错误:
"This operation would create an incorrectly structured document."
. 。
How can I add the node under " file:Characters
". 如何在“ file:Characters
”下添加节点。
You're trying to add an extra file:Character
element directly into the root. 您正在尝试添加一个额外的file:Character
元素直接添加到根目录中。 You don't want to do that - you want to add it under the file:Characters
element, presumably. 你不想这样做 - 你想把它添加到file:Characters
元素,大概是。
Also note that Descendants()
will never return null - it will return an empty sequence if there are no matching elements. 另请注意, Descendants()
永远不会返回null - 如果没有匹配的元素,它将返回一个空序列。 So you want: 所以你要:
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);
}
Note that I've used more conventional naming, Path.Combine
, and also moved the Save
call so that you'll only end up saving if you've actually made a change to the document. 请注意,我使用了更常规的命名, 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")));
Note: I have not included the namespace for brevity. 注意:为简洁起见,我没有包含命名空间。 You have to add those. 你必须添加这些。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.