Почему мой 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.
Этот код выводит:
<?xml version="1.0" encoding="utf-8"?>
<root>
<subelement1>1</subelement1>
<subelement2>2</subelement2>
</root>
Ответы
Ответ 1
Вместо 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);
}
Ответ 2
Вы можете сделать это, используя XmlWriter
с пользовательским XmlWriterSettings
(вам понадобится директива using для System.Xml
):
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
в корневом элементе, конечно же, таким же образом.)