Как сохранить? Если я сделаю следующее, объявление xml выйдет так, как должно:
XDocument xDocument = new XDocument(
new XDeclaration("1.0", "UTF-8", "yes"),
new XElement("Books"));
xDocument.Save(@"c:\temp\file.xml");
Вывод выглядит так:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Books />
Однако, если я вместо этого передам экземпляр XmlWriter, создается впечатление, что параметры этого XmlWriter переопределяют то, что указано в XDocument:
XDocument xDocument = new XDocument(
new XDeclaration("1.0", "UTF-8", "yes"),
new XElement("Books"));
StringBuilder sb = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(sb))
{
xDocument.Save(writer);
}
Console.WriteLine(sb.ToString());
Вывод выглядит так:
<?xml version="1.0" encoding="utf-16" standalone="yes"?><Books />
Обратите внимание, что кодировка изменилась на "utf-16" и изменился отступ. Если вы добавите экземпляр XmlWriterSettings, указывающий кодировку (и любые другие параметры, которые вы хотите контролировать), вы получите лучший результат. Следующий код делает то, что вы ожидаете:
XDocument xDocument = new XDocument(
new XDeclaration("1.0", "UTF-8", "yes"),
new XElement("Books"));
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.ConformanceLevel = ConformanceLevel.Document;
settings.Indent = true;
using (XmlWriter writer = XmlWriter.Create(@"c:\temp\xdocument.xml", settings))
{
xDocument.Save(writer);
}
Выход:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Books />