C# 为什么我的XDocument在我没有';我不想这样?
我有以下代码:C# 为什么我的XDocument在我没有';我不想这样?,c#,xml,linq-to-xml,C#,Xml,Linq To Xml,我有以下代码: class Program { static void Main(string[] args) { using (var stream = File.Create(@"C:\test.xml")) { var xml = new XElement("root", new XElement("subelement1", "1"),
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中
此代码正在输出:
<?xml version="1.0" encoding="utf-8"?>
<root>
<subelement1>1</subelement1>
<subelement2>2</subelement2>
</root>
1.
2.
而不是XDocument.Save()
您可以将XmlWriter
与XmlWriterSettings一起使用。省略xmldeclaration
设置为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
执行此操作(您需要System.Xml
的using指令):
假设您要指定流
——您还可以从文件名创建XmlWriter
:
using (var writer = XmlWriter.Create("test.xml", settings))
{
doc.Save(writer);
}
(如果您不需要
XDocument
来做任何其他事情,您可以用同样的方式在根元素上调用Save
。我找不到这个方法,请您提供一个指向MSDN
的链接。为什么您希望保存一个没有声明的XML文档?包含一个声明非常有用,该声明为XML文件的使用者指定XML文档的编码和版本。因为此XML被发送到其他公司内系统,如果您有XML声明,这些系统显然会崩溃(我无法控制这些系统,这是另一个完整的部门)这很公平:)我只是想知道为什么编辑:如果不使用Jon的代码,那么它仍然将声明添加为XDocument.Save
方法调用XNode.GetXmlWriterSettings
方法,然后返回一个新的XmlWriterSettings
对象,已将ommitXMLDeclaration
设置为false的default@JamesShuttler:上面的代码没有为我编写声明。你试过了吗?为什么要在XElement
中构建XML
主体,然后将其插入XDocument
。而不是用XDocument
构建整个XML
?@gdoron:OP的代码就是这样做的。我只更改了保存部分。@JonSkeet很抱歉我不清楚,您的代码没有编写XML声明,这是正确的。你说你不确定为什么它仍然添加声明,即使它在海报代码中被明确删除。我解释了为什么如果您不使用您提供的代码,它仍然会被添加
using (var writer = XmlWriter.Create("test.xml", settings))
{
doc.Save(writer);
}