Как запретить XDocument добавлять XML-версию и информацию о кодировании

Несмотря на использование опции SaveOptions.DisableFormatting в следующем коде:

XDocument xmlDoc = XDocument.Load(FileManager.SourceFile); 
string element="campaign";
string attribute="id";

var items = from item in xmlDoc.Descendants(element)                        
            select item;

foreach (XElement itemAttribute in items)
{
    itemAttribute.SetAttributeValue(attribute, "it worked!");
    //itemElement.SetElementValue("name", "Lord of the Rings Figures");
}

xmlDoc.Save(TargetFile, SaveOptions.DisableFormatting);

целевой XML файл добавляет к нему следующее:

<?xml version="1.0" encoding="utf-8"?>

Есть ли способ сохранить исходное форматирование и не добавлять версию и информацию о кодировке?

Ответ 1

Это поведение метода XDocument.Save при сериализации в файл или TextWriter. Если вы хотите опустить объявление XML, вы можете использовать XmlWriter (как показано ниже) или вызвать ToString. См. Сериализация с декларацией XML.

XDocument xmlDoc = XDocument.Load(FileManager.SourceFile); 

// perform your modifications on xmlDoc here

XmlWriterSettings xws = new XmlWriterSettings { OmitXmlDeclaration = true };
using (XmlWriter xw = XmlWriter.Create(targetFile, xws))
    xmlDoc.Save(xw);