XElement.Save
создает целый документ самостоятельно - вам нужно XElement.WriteTo
, чего нет.Поэтому (упрощенно):
var sb = new StringBuilder();
using (var sw = new StringWriter(sb))
using (XmlWriter writer = XmlWriter.Create(sw)) {
var root = new XElement("root");
root.Add(new XElement("id", "1"));
root.Save(writer); // no DocumentStart, no ElementStart
}
<?xml version="1.0" encoding="utf-16"?><root><id>1</id></root>
или (если вы хотите написать несколько элементов или по какой-то другой причине хотите самостоятельно управлять узлом документа):
using (XmlWriter writer = XmlWriter.Create(sw)) {
writer.WriteStartDocument();
writer.WriteStartElement("root");
var notRoot = new XElement("notRoot");
notRoot.Add(new XElement("id", "1"));
notRoot.WriteTo(writer);
notRoot.WriteTo(writer);
}
<?xml version="1.0" encoding="utf-16"?><root><notRoot><id>1</id></notRoot><notRoot><id>1</id></notRoot></root>
Обратите внимание, что я опускаю вызовы End
, поскольку XmlWriter
позаботится об этом неявно.
Если вы не делаете ничего интересного с xmlSettings
, весьвсе еще проще, поскольку XElement.Save
имеет перегрузку, которая принимает имя файла напрямую, поэтому вам вообще не нужен XmlWriter
.