为什么我的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
。)