C#怎么生成XML文件 C#动态创建XML方法

13次阅读

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

C#怎么生成XML文件 C#动态创建XML方法

用C#生成XML文件最推荐的方式是使用 XmlDocument 或更现代的 XDocument(来自 System.Xml.linq),它们支持动态构建、结构清晰、不易出错。直接字符串拼接虽然可行,但容易引发格式错误或转义问题,不建议用于生产环境。

用 XDocument 动态创建 XML(推荐)

XDocument 是 LINQ to XML 的核心类,语法简洁、功能强大,适合大多数动态生成场景。

  • 先引入命名空间using System.Xml.Linq;
  • 创建根元素,再逐层添加子元素、属性和文本内容
  • 调用 Save() 方法写入文件,自动处理缩进和编码

示例:生成一个带属性和嵌套节点的配置文件

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);

text=ZqhQzanResources