我有一个 xml 文件,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<file:Situattion xmlns:file="test">
<file:Properties>
</file:Situattion>
我想添加子元素文件:使用 xDocument 的字符。这样我的最终 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>
下面给出了我尝试使用 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"));
”,我收到一个错误:
“此操作会创建结构不正确的文档。”
。
如何在“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
调用,这样您只有在保存时才会结束实际上对文档进行了更改。
关于c# - 使用 c# Xdocument 类添加子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17916788/