使用 XML 声明进行序列化 (LINQ to XML)

本文介绍如何控制在 C# 或 Visual Basic 中序列化 XML 时是否生成 XML 声明。

使用 File 方法或 TextWriter 方法序列化为 XElement.SaveXDocument.Save 将生成 XML 声明。 在序列化为 XmlWriter 时,编写器设置(在 XmlWriterSettings 对象中指定)将确定是否生成 XML 声明。

如果要使用 ToString 方法序列化为字符串,则生成的 XML 不会包括 XML 声明。

示例:使用 XML 声明进行序列化

下面的示例创建一个 XElement,将文档保存到文件,然后将文件打印到控制台:

XElement root = new XElement("Root",
    new XElement("Child", "child content")
);
root.Save("Root.xml");
string str = File.ReadAllText("Root.xml");
Console.WriteLine(str);
Dim root As XElement = <Root>
                           <Child>child content</Child>
                       </Root>
root.Save("Root.xml")
Dim str As String = File.ReadAllText("Root.xml")
Console.WriteLine(str)

该示例产生下面的输出:

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Child>child content</Child>
</Root>

示例:不使用 XML 声明进行序列化

下面的示例演示如何将一个 XElement 保存到一个 XmlWriter

StringBuilder sb = new StringBuilder();
XmlWriterSettings xws = new XmlWriterSettings();
xws.OmitXmlDeclaration = true;

using (XmlWriter xw = XmlWriter.Create(sb, xws)) {
    XElement root = new XElement("Root",
        new XElement("Child", "child content")
    );
    root.Save(xw);
}
Console.WriteLine(sb.ToString());
Dim sb As StringBuilder = New StringBuilder()
Dim xws As XmlWriterSettings = New XmlWriterSettings()
xws.OmitXmlDeclaration = True

Using xw As XmlWriter = XmlWriter.Create(sb, xws)
    Dim root = <Root>
                   <Child>child content</Child>
               </Root>
    root.Save(xw)
End Using
Console.WriteLine(sb.ToString())

该示例产生下面的输出:

<Root><Child>child content</Child></Root>