在 C# (.NET) 中处理 XML:初学者完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 C# (.NET) 中处理 XML:完整指南



XML(可扩展标记语言)仍然是 .NET 生态系统中存储和传输结构化数据的关键格式之一。在 C# 中,有多种强大的工具可用于处理 XML:从经典的 XmlDocument 到来自 LINQ to XML 的现代 XDocument,以及通过 XmlSerializer 进行的高级序列化。在本文中,我们将通过实际示例介绍所有主要方法。



1. 经典方法:XmlDocument



System.Xml.XmlDocument 是一种 DOM(文档对象模型)模型,它将整个 XML 文档作为节点树加载到内存中。自 .NET Framework 1.0 时代以来,开发人员就熟悉这种方法。



加载和读取 XML



using System.Xml;

XmlDocument doc = new XmlDocument();doc.Load("books.xml");

// 获取根元素XmlElement root = doc.DocumentElement;

// 遍历所有子节点foreach (XmlNode node in root.ChildNodes){ if (node.Name == "book") { string title = node["title"]?.InnerText; string author = node["author"]?.InnerText; Console.WriteLine($"书籍:{title},作者:{author}"); }}


创建和写入 XML



XmlDocument newDoc = new XmlDocument();XmlElement rootElem = newDoc.CreateElement("library");newDoc.AppendChild(rootElem);

XmlElement book = newDoc.CreateElement("book");rootElem.AppendChild(book);

XmlElement title = newDoc.CreateElement("title");title.InnerText = "大师与玛格丽特";book.AppendChild(title);

newDoc.Save("library.xml");


优点:简单,支持 XPath,完全控制 DOM。
缺点:占用大量内存,不支持 LINQ。



2. 现代方法:LINQ to XML (XDocument)



从 .NET 3.5 开始,建议使用 System.Xml.Linq 命名空间。XDocument、XElement 和 XAttribute 类提供了更轻量级、功能更丰富的 API,并与 LINQ 完全集成。



使用 XDocument 读取 XML



using System.Xml.Linq;

XDocument xdoc = XDocument.Load("books.xml");

var books = xdoc.Descendants("book") .Select(b => new { Title = b.Element("title")?.Value, Author = b.Element("author")?.Value, Year = (int?)b.Element("year") });

foreach (var book in books){ Console.WriteLine($"{book.Title} — {book.Author} ({book.Year})");}


使用 XElement 创建 XML



XDocument xdoc = new XDocument(    new XElement("library",        new XElement("book",            new XElement("title", "罪与罚"),            new XElement("author", "费奥多尔·陀思妥耶夫斯基"),            new XAttribute("id", "1")        )    ));

xdoc.Save("library2.xml");


优点:语法简洁,支持 LINQ,内存占用更少。
缺点:对于习惯 DOM 的开发人员来说可能不太习惯。



3. 对象序列化为 XML:XmlSerializer



如果您有 C# 类,可以使用 System.Xml.Serialization.XmlSerializer 自动将它们转换为 XML 并转换回来。



用于序列化的示例类



[Serializable]public class Book{    [XmlAttribute("id")]    public int Id { get; set; }

[XmlElement("title")] public string Title { get; set; }

[XmlElement("author")] public string Author { get; set; }

[XmlIgnore] public string InternalNote { get; set; }}


序列化(对象 → XML)



using System.Xml.Serialization;using System.IO;

Book book = new Book { Id = 1, Title = "战争与和平", Author = "列夫·托尔斯泰" };

XmlSeria

推荐