为什么我的XDocument在我不想要时保存声明?

我有以下代码:

class Program { static void Main(string[] args) { using (var stream = File.Create(@"C:\test.xml")) { var xml = new XElement("root", new XElement("subelement1", "1"), new XElement("subelement2", "2")); var doc = new XDocument(xml); doc.Declaration = null; doc.Save(stream); } } } 

我试图在没有xml声明的情况下保存XML,但即使我将XDocument的声明归零,它仍然被保存到最终的XML中。

此代码输出:

   1 2  

相反, XDocument.Save()可以使用XmlWriter并将XmlWriterSettings.OmitXmlDeclaration设置为true

 using System.IO; using System.Xml; using System.Xml.Linq; XmlWriterSettings xws = new XmlWriterSettings(); xws.OmitXmlDeclaration = true; xws.Indent = true; using (var stream = File.Create(@"C:\test.xml")) using (XmlWriter xw = XmlWriter.Create(stream, xws)) { var xml = new XElement( "root", new XElement("subelement1", "1"), new XElement("subelement2", "2")); xml.Save(xw); } 

可以使用XmlWriter和自定义XmlWriterSettings 完成此操作(您需要System.Xml的using指令):

 using System; using System.IO; using System.Xml; using System.Xml.Linq; class Program { static void Main(string[] args) { var xml = new XElement("root", new XElement("subelement1", "1"), new XElement("subelement2", "2")); var doc = new XDocument(xml); var settings = new XmlWriterSettings { OmitXmlDeclaration = true }; using (var stream = File.Create(@"test.xml")) { using (var writer = XmlWriter.Create(stream, settings)) { doc.Save(writer); } } } } 

假设您要指定Stream – 您还可以从文件名创建XmlWriter

 using (var writer = XmlWriter.Create("test.xml", settings)) { doc.Save(writer); } 

(如果您不需要其他任何XDocument ,您可以以相同的方式在根元素上调用Save 。)