推荐使用XDocument进行xml操作,它支持linq to XML,适用于大多数场景;读取时可加载文件并解析元素,创建时可通过XElement构建结构并保存;修改时可增删改节点后保存;对于大文件则推荐XmlReader和XmlWriter以提升性能;注意文件路径配置确保正确访问。

在c# .net Core中操作XML文件非常常见,主要用于配置读取、数据交换或持久化存储。.NET Core 提供了多种方式来读取、创建、修改和保存XML文件,主要依赖于 System.Xml 命名空间下的类,如 XDocument、XmlDocument、XmlReader 和 XmlWriter。下面介绍几种常用且推荐的方式。
使用 XDocument(推荐,LINQ to XML)
XDocument 是 LINQ to XML 的核心类之一,语法简洁,支持链式操作,适合大多数场景。
读取XML文件:
假设有一个名为 data.xml 的文件:
<?xml version="1.0" encoding="utf-8"?> <Books> <Book Id="1"> <Title>C# 入门经典</Title> <Author>张三</Author> </Book> <Book Id="2"> <Title>ASP.NET Core 开发实战</Title> <Author>李四</Author> </Book> </Books>
使用 XDocument 读取内容:
using System; using System.Linq; using System.Xml.Linq; <p>var doc = XDocument.Load("data.xml");</p><p>var books = doc.Root.Elements("Book") .Select(b => new { Id = b.Attribute("Id")?.Value, Title = b.Element("Title")?.Value, Author = b.Element("Author")?.Value });</p><p>foreach (var book in books) { Console.WriteLine($"ID: {book.Id}, 标题: {book.Title}, 作者: {book.Author}"); }</p>
创建并保存XML文件:
var newDoc = new XDocument( new XElement("Books", new XElement("Book", new XAttribute("Id", "3"), new XElement("Title", "深入理解.NET"), new XElement("Author", "王五") ) ) ); <p>newDoc.Save("new_books.xml");</p>
修改现有XML文件
可以加载已有XML,添加、修改或删除节点。
var doc = XDocument.Load("data.xml"); <p>// 添加新书 doc.Root.Add( new XElement("Book", new XAttribute("Id", "4"), new XElement("Title", "Entity Framework 教程"), new XElement("Author", "赵六") ) );</p><p>// 修改某本书的作者 var bookToUpdate = doc.Root.Elements("Book") .FirstOrDefault(b => b.Attribute("Id")?.Value == "1"); if (bookToUpdate != null) { bookToUpdate.Element("Author").Value = "张更新"; }</p><p>// 删除某本书 var bookToDelete = doc.Root.Elements("Book") .FirstOrDefault(b => b.Attribute("Id")?.Value == "2"); bookToDelete?.Remove();</p><p>doc.Save("data.xml"); // 保存更改</p>
使用 XmlReader 高效读取大文件
当处理大型XML文件时,XDocument 会将整个文档加载到内存,可能影响性能。XmlReader 提供只进、只读的流式读取方式,更节省资源。
using System.Xml; <p>using var reader = XmlReader.Create("data.xml");</p><p>while (reader.Read()) { if (reader.nodeType == XmlNodeType.Element && reader.Name == "Title") { reader.Read(); Console.WriteLine("书名: " + reader.Value); } }</p>
使用 XmlWriter 写入大文件或流
与 XmlReader 对应,XmlWriter 适合高效写入大量数据。
using System.Xml; <p>var settings = new XmlWriterSettings { Indent = true, Encoding = System.Text.Encoding.UTF8 };</p><p>using var writer = XmlWriter.Create("large_output.xml", settings);</p><p>writer.WriteStartDocument(); writer.WriteStartElement("Items");</p><p>for (int i = 1; i <= 1000; i++) { writer.WriteStartElement("Item"); writer.WriteAttributeString("Id", i.ToString()); writer.WriteString($"内容{i}"); writer.WriteEndElement(); }</p><p>writer.WriteEndElement(); writer.WriteEndDocument();</p>
基本上就这些。对于常规操作,推荐使用 XDocument,它简洁易用;处理大文件时改用 XmlReader/XmlWriter 更合适。注意路径问题:在 .NET Core 中确保 XML 文件被复制到输出目录,或使用绝对路径/相对路径正确指向文件位置。


