XDocument.Save() 默认不格式化,需用 XmlWriter 配合 XmlWriterSettings(Indent=true、Encoding=UTF8)实现缩进换行;IndentChars 可设空格或 "\t",OmitXmlDeclaration 控制声明输出。

C# 中 XDocument.Save() 默认不带缩进和换行,要实现格式化(美观、可读)输出,关键在于使用 XmlWriter 配合 XmlWriterSettings 来控制格式。
启用缩进和自动换行
直接调用 doc.Save(path) 会生成紧凑 XML(一行式)。必须通过自定义 XmlWriter 启用格式化:
- 设置
XmlWriterSettings.Indent = true - 设置
XmlWriterSettings.NewLineOnAttributes = false(可选,避免属性换行) - 推荐设置
Encoding以保持中文等字符正确(如 UTF-8)
完整示例代码
以下写法可生成带缩进、换行、UTF-8 编码的格式化 XML 文件:
Python v2.4版chm格式的中文手册,内容丰富全面,不但是一本手册,你完全可以把她作为一本Python的入门教程,教你如何使用Python解释器、流程控制、数据结构、模板、输入和输出、错误和异常、类和标准库详解等方面的知识技巧。同时后附的手册可以方便你的查询。
XDocument doc = new XDocument(
new XElement("Root",
new XElement("Child", "Content"),
new XElement("Child",
new XAttribute("id", "1"),
"Another content"
)
)
);
var settings = new XmlWriterSettings
{
Indent = true,
Encoding = Encoding.UTF8,
NewLineOnAttributes = false
};
using (var writer = XmlWriter.Create("output.xml", settings))
{
doc.Save(writer);
}
注意:Save(string) 不格式化
XDocument.Save("file.xml") 内部使用默认 XmlWriter,Indent 为 false,所以不会缩进。这是常见误区——不能只靠 Save() 方法名判断是否格式化。
如果需要更精细控制(如缩进空格数)
XmlWriterSettings.IndentChars 可指定缩进符号,默认是两个空格。如需 Tab 缩进,设为 "\t":
settings.IndentChars = "\t";-
settings.OmitXmlDeclaration = false;(保留 声明) - 若不想要声明,设为
true,但注意这不影响格式化本身









