如何防止 XDocument 添加 XML 版本和编码信息

27

尽管在以下代码中使用了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"?>

有没有办法保留原始格式而不添加版本和编码信息?


4
那不是格式。它是文档的一部分。是什么问题导致您想要将其删除? - John Saunders
我正在尝试使用现有的XML文件创建合成数据,这些文件省略了该部分。除了我的修改之外,我希望生成的XML文件尽可能接近原始文件。 - Ein Doofus
没有任何代码应该对这些指令有问题。如果有任何代码关心它,那么它就是有问题的,应该尽快修复。 - John Saunders
Infopath Sharepoint 集成使用 XML 文件,有时不需要 XML 声明。这是微软的代码。 - Coruscate5
1个回答

45

当序列化到文件或TextWriter时,这就是XDocument.Save方法的行为。如果您想省略XML声明,可以使用XmlWriter(如下所示)或调用ToString。请参阅Serializing with an XML Declaration

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接