最推荐使用XDocument动态创建xml,语法简洁、自动处理转义和编码;其次可选XmlDocument(兼容旧项目)或XmlSerializer(适合固定结构的对象序列化)。

用C#生成XML文件最推荐的方式是使用 XmlDocument 或更现代的 XDocument(来自 System.Xml.linq),它们支持动态构建、结构清晰、不易出错。直接字符串拼接虽然可行,但容易引发格式错误或转义问题,不建议用于生产环境。
用 XDocument 动态创建 XML(推荐)
XDocument 是 LINQ to XML 的核心类,语法简洁、功能强大,适合大多数动态生成场景。
示例:生成一个带属性和嵌套节点的配置文件
XDocument doc = new XDocument( new XElement("Config", new XAttribute("version", "1.2"), new XElement("Database", new XAttribute("type", "sqlserver"), new XElement("Server", "localhost"), new XElement("Name", "MyappDB") ), new XElement("Logging", new XElement("Level", "Info"), new XElement("Path", @"C:Logsapp.log") ) ) ); doc.Save("config.xml"); // 自动保存为格式化 XML
用 XmlDocument 创建 XML(兼容老项目)
XmlDocument 更底层,适合需要精细控制节点生命周期或需与旧代码集成的场景。
- 用 CreateElement() 和 CreateAttribute() 构建节点
- 通过 AppendChild() 或 PrependChild() 组织层级
- 调用 Save() 前可设置 XmlDocument.PreserveWhitespace = false 确保格式整洁
示例:
XmlDocument doc = new XmlDocument(); XmlElement root = doc.CreateElement("Users"); doc.AppendChild(root); XmlElement user = doc.CreateElement("User"); user.SetAttribute("id", "101"); user.AppendChild(doc.CreateElement("Name")).InnerText = "张三"; user.AppendChild(doc.CreateElement("Email")).InnerText = "zhang@example.com"; root.AppendChild(user);
doc.Save("users.xml");
处理特殊字符与编码问题
XML 对 、>、&、"、' 等字符有严格转义要求,XDocument 和 XmlDocument 都会自动处理——只要你不手动拼接字符串。
- 避免用
+"这类拼接方式" + name + " " - 若内容来自用户输入或数据库,务必用 XElement(“Name”, userInput) 或 doc.CreateTextnode(userInput)
- 保存时默认使用 UTF-8 编码;如需指定编码,可用 XmlWriter 配合 XmlWriterSettings
从对象序列化生成 XML(适合数据结构固定)
如果已有 C# 类,且字段/属性与 XML 结构基本对应,可用 XmlSerializer 快速生成。
- 类需标记 [Serializable] 或用 [XmlElement] 控制节点名
- 注意:只序列化公共字段和属性,不支持字典、匿名类型等复杂结构
- 性能略低于 XDocument,但开发效率高
示例:
[Serializable] public class Person { [XmlElement("FullName")] public string Name { get; set; } public int Age { get; set; } } var person = new Person { Name = "李四", Age = 28 }; var serializer = new XmlSerializer(typeof(Person)); using (var writer = new streamWriter("person.xml")) serializer.Serialize(writer, person);