.NET中生成和解析XML常用XmlDocument、XDocument和XmlSerializer。XmlDocument基于DOM,适合复杂结构和频繁修改;XDocument为LINQ to XML,语法简洁,推荐新项目使用;XmlSerializer用于对象序列化,适合类与XML互转。根据需求选择:灵活操作选XDocument,对象映射用XmlSerializer,兼容旧项目用XmlDocument。

.NET 提供了多种方式来生成和解析 XML 文件,最常用的是 XmlDocument、XDocument(LINQ to XML) 和 XmlSerializer。下面分别介绍这三种方法的使用场景和代码示例。
使用 XmlDocument 生成和解析 XML
XmlDocument 是基于 DOM 的类,适合处理结构较复杂或需要频繁修改的 XML 文档。
生成 XML 示例:
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("Books");
doc.AppendChild(root);
XmlElement book = doc.CreateElement("Book");
book.SetAttribute("Id", "1");
XmlElement title = doc.CreateElement("Title");
title.InnerText = "C# 入门";
book.AppendChild(title);
root.AppendChild(book);
doc.Save("books.xml"); // 保存到文件
解析 XML 示例:
本文档主要讲述的是使用JSON进行网络数据交换传输;JSON(JavaScript ObjectNotation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成,非常适合于服务器与客户端的交互。JSON采用与编程语言无关的文本格式,但是也使用了类C语言的习惯,这些特性使JSON成为理想的数据交换格式。 和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON的数据格式非常简单,您可以用 JSON 传输一个简单的 St
XmlDocument doc = new XmlDocument();
doc.Load("books.xml");
XmlNodeList books = doc.SelectNodes("//Book");
foreach (XmlNode book in books)
{
string id = book.Attributes["Id"]?.Value;
string title = book["Title"]?.InnerText;
Console.WriteLine($"ID: {id}, Title: {title}");
}
使用 LINQ to XML(XDocument)操作 XML
XDocument 是 .NET 3.5 引入的现代 API,语法更简洁,推荐用于新项目。
生成 XML 示例:
XDocument doc = new XDocument(
new XElement("Books",
new XElement("Book",
new XAttribute("Id", "1"),
new XElement("Title", "C# 入门")
)
)
);
doc.Save("books.xml");
解析 XML 示例:
XDocument doc = XDocument.Load("books.xml");
var books = doc.Descendants("Book");
foreach (var book in books)
{
string id = book.Attribute("Id")?.Value;
string title = book.Element("Title")?.Value;
Console.WriteLine($"ID: {id}, Title: {title}");
}
使用 XmlSerializer 序列化和反序列化对象
当你有现成的类结构,想直接转成 XML 或从 XML 还原对象时,XmlSerializer 是最佳选择。
定义类:
[Serializable]
public class Book
{
[XmlAttribute("Id")]
public int Id { get; set; }
public string Title { get; set; }}
[Serializable]
[XmlRoot("Books")]
public class BookList
{
[XmlElement("Book")]
public List Books { get; set; } = new List();
}
序列化为 XML:
BookList list = new BookList();
list.Books.Add(new Book { Id = 1, Title = "C# 入门" });
XmlSerializer serializer = new XmlSerializer(typeof(BookList));
using (StreamWriter writer = new StreamWriter("books.xml"))
{
serializer.Serialize(writer, list);
}
从 XML 反序列化:
XmlSerializer serializer = new XmlSerializer(typeof(BookList));
using (StreamReader reader = new StreamReader("books.xml"))
{
BookList list = (BookList)serializer.Deserialize(reader);
foreach (var book in list.Books)
{
Console.WriteLine($"ID: {book.Id}, Title: {book.Title}");
}
}
基本上就这些。根据你的需求选择合适的方式:操作灵活用 XDocument,处理对象映射用 XmlSerializer,老项目兼容可用 XmlDocument。不复杂但容易忽略命名空间和异常处理。









