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

最推荐使用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:/Logs/app.log")
        )
    )
);

doc.Save("config.xml"); // 自动保存为格式化 XML

用 XmlDocument 创建 XML(兼容老项目)

XmlDocument 更底层,适合需要精细控制节点生命周期或需与旧代码集成的场景。

  • CreateElement()CreateAttribute() 构建节点
  • 通过 AppendChild()PrependChild() 组织层级
  • 调用 Save() 前可设置 XmlDocument.PreserveWhitespace = false 确保格式整洁

示例:

X Detector

X Detector

最值得信赖的多语言 AI 内容检测器

下载

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

https://www.php.cn/faq/1982120.html

发表回复

Your email address will not be published. Required fields are marked *