У меня есть следующий код:
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 файл содержит <Users FileDirectory="C:\data"/>
вместо <Users FileDirectory="C:\data" ></Users>
как я хочу.
Как создать конечный элемент? Я дал ему Google, и я не могу найти много. Любая помощь приветствуется, спасибо.
Вот три способа заставить XmlDocument.Save вывести отдельный конечный тег для пустого XmlElement вместо пустого самозакрывающегося тега.
Вставьте пустой элемент пробела внутри элемента:
UsersNode.AppendChild(Settings.CreateWhitespace(""));
Здесь вывод:
<Users FileDirectory="C:\data"></Users>
Установите для свойства XmlElement.IsEmpty элемента значение false:
((XmlElement)UsersNode).IsEmpty = false;
Обратите внимание, что с помощью этого метода стандартные параметры форматирования XML будут вставлять разрыв строки между начальным тегом и конечным тегом. Здесь вывод:
<Users FileDirectory="C:\data">
</Users>
Выведите собственный XmlTextWriter, который переадресует все вызовы WriteEndElement в WriteFullEndElement:
public class CustomXmlTextWriter : XmlTextWriter
{
public CustomXmlTextWriter(string fileName)
: base(fileName, Encoding.UTF8)
{
this.Formatting = Formatting.Indented;
}
public override void WriteEndElement()
{
this.WriteFullEndElement();
}
}
Использование:
using (var writer = new CustomXmlTextWriter(Path.Combine(PathName, FileName)))
{
Settings.Save(writer);
}
Этот метод может потребовать меньше кода в целом, если в документе имеется много пустых элементов.
Как и в случае с методом 2, параметры форматирования XML по умолчанию будут вставлять разрыв строки между начальным тегом и конечным тегом каждого пустого элемента.