C# 强制XmlDocument使用显式结束标记保存空元素

C# 强制XmlDocument使用显式结束标记保存空元素,c#,.net,xml,xmldocument,C#,.net,Xml,Xmldocument,我有以下代码: string PathName = "C:\\Users\\TestUser\\Documents\\Project"; string FileName = "settings.xml"; XmlDocument Settings = new XmlDocument(); Settings.Load(Path.Combine(PathName, FileName)); XmlNode KnowledgeNode = Settings.SelectSingleNode("/C

我有以下代码:

string PathName = "C:\\Users\\TestUser\\Documents\\Project";
string FileName = "settings.xml";

XmlDocument Settings = new XmlDocument(); 
Settings.Load(Path.Combine(PathName, FileName));

XmlNode KnowledgeNode = Settings.SelectSingleNode("/Config/Map/Knowledge");

XmlNode UsersNode = Settings.CreateNode(XmlNodeType.Element, "Users", null);
XmlAttribute FileDirectory = Settings.CreateAttribute("FileDirectory");
FileDirectory.Value = UserSelectedFileDirectory;
UsersNode.Attributes.Append(FileDirectory);
KnowledgeNode.AppendChild(UsersNode);

Settings.Save(Path.Combine(PathName, FileName));
这将导致我的XML文件包含
而不是我想要的


如何创建结束元素?我给了它一个谷歌,我找不到太多。感谢您的帮助。

这里有三种方法可以强制XmlDocument.Save为空的XmlElement输出单独的结束标记,而不是空的自动结束标记

方法1 在元素内插入一个空白节点:

UsersNode.AppendChild(Settings.CreateWhitespace(""));
以下是输出:

<Users FileDirectory="C:\data"></Users>
<Users FileDirectory="C:\data">
</Users>
请注意,使用此方法,默认的XML格式设置将在开始标记和结束标记之间插入一个换行符。以下是输出:

<Users FileDirectory="C:\data"></Users>
<Users FileDirectory="C:\data">
</Users>
用法:

using (var writer = new CustomXmlTextWriter(Path.Combine(PathName, FileName)))
{
    Settings.Save(writer);
}
如果文档中有大量空元素,则此方法可能需要更少的代码

与方法2一样,默认的XML格式设置将在每个空元素的开始标记和结束标记之间插入一个换行符