C# 读写 XML 文件应用
在 C# 中,处理 XML 文件可以通过多种方式实现。最常用的方法是使用 System.Xml
命名空间下的类,比如 XmlDocument
、XmlReader
、XmlWriter
和 XDocument
(LINQ to XML)。这些类提供了对 XML 文件的读取、写入、查询和修改功能。
本文将介绍如何使用 XmlDocument
和 XDocument
两种常见方法来读写 XML 文件。
1. 使用 XmlDocument
读写 XML 文件
XmlDocument
是传统的 DOM(文档对象模型)方式来处理 XML 文件。它将整个 XML 文件加载到内存中,形成一个树形结构,可以通过遍历和操作树节点来读取和修改 XML 数据。
1.1 读取 XML 文件
<?xml version="1.0" encoding="UTF-8" ?>
<bookstore>
<book>
<title lang="en">XML教程</title>
<author>John Doe</author>
<price>29.95</price>
</book>
<book>
<title lang="zh">C#编程</title>
<author>Jane Doe</author>
<price>39.95</price>
</book>
</bookstore>
C# 代码:读取 XML 文件并获取其中的节点信息。
using System;
using System.Xml;
class Program
{
static void Main()
{
XmlDocument doc = new XmlDocument();
doc.Load("books.xml"); // 加载 XML 文件
XmlNodeList books = doc.GetElementsByTagName("book"); // 获取所有 <book> 节点
foreach (XmlNode book in books)
{
XmlNode title = book["title"];
XmlNode author = book["author"];
XmlNode price = book["price"];
Console.WriteLine($"书名: {title.InnerText}, 作者: {author.InnerText}, 价格: {price.InnerText}");
}
}
}
输出:
书名: XML教程, 作者: John Doe, 价格: 29.95
书名: C#编程, 作者: Jane Doe, 价格: 39.95
1.2 写入 XML 文件
using System;
using System.Xml;
class Program
{
static void Main()
{
XmlDocument doc = new XmlDocument();
// 创建 XML 声明
XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.AppendChild(declaration);
// 创建根节点
XmlElement root = doc.CreateElement("bookstore");
doc.AppendChild(root);
// 创建第一个书籍节点
XmlElement book1 = doc.CreateElement("book");
XmlElement title1 = doc.CreateElement("title");
title1.SetAttribute("lang", "en");
title1.InnerText = "C#高级编程";
XmlElement author1 = doc.CreateElement("author");
author1.InnerText = "James Smith";
XmlElement price1 = doc.CreateElement("price");
price1.InnerText = "49.99";
book1.AppendChild(title1);
book1.AppendChild(author1);
book1.AppendChild(price1);
root.AppendChild(book1);
// 保存到文件
doc.Save("new_books.xml");
Console.WriteLine("XML 文件已保存。");
}
}
该代码将创建一个新的 XML 文件并保存。新的 XML 文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book>
<title lang="en">C#高级编程</title>
<author>James Smith</author>
<price>49.99</price>
</book>
</bookstore>
2. 使用 XDocument
(LINQ to XML)读写 XML 文件
XDocument
是 LINQ to XML 的一部分,它提供了一种更简洁、更现代的方式来处理 XML。XDocument
基于 LINQ 查询语言,支持直接对 XML 进行查询、过滤和操作。
2.1 读取 XML 文件
<?xml version="1.0" encoding="UTF-8" ?>
<bookstore>
<book>
<title lang="en">XML教程</title>
<author>John Doe</author>
<price>29.95</price>
</book>
<book>
<title lang="zh">C#编程</title>
<author>Jane Doe</author>
<price>39.95</price>
</book>
</bookstore>
C# 代码:使用 LINQ 查询读取 XML 文件。
using System;
using System.Linq;
using System.Xml.Linq;
class Program
{
static void Main()
{
XDocument doc = XDocument.Load("books.xml");
var books = from b in doc.Descendants("book")
select new
{
Title = b.Element("title").Value,
Author = b.Element("author").Value,
Price = b.Element("price").Value
};
foreach (var book in books)
{
Console.WriteLine($"书名: {book.Title}, 作者: {book.Author}, 价格: {book.Price}");
}
}
}
输出:
书名: XML教程, 作者: John Doe, 价格: 29.95
书名: C#编程, 作者: Jane Doe, 价格: 39.95
2.2 写入 XML 文件
using System;
using System.Xml.Linq;
class Program
{
static void Main()
{
XElement bookstore = new XElement("bookstore",
new XElement("book",
new XElement("title", new XAttribute("lang", "en"), "C#高级编程"),
new XElement("author", "James Smith"),
new XElement("price", "49.99")
)
);
// 保存到文件
bookstore.Save("new_books.xml");
Console.WriteLine("XML 文件已保存。");
}
}
该代码使用 XElement
创建 XML 并保存。保存后的 new_books.xml
文件内容如下:
<bookstore>
<book>
<title lang="en">C#高级编程</title>
<author>James Smith</author>
<price>49.99</price>
</book>
</bookstore>
3. 总结
XmlDocument
:- 基于传统的 DOM(文档对象模型),适合需要操作整个 XML 文件的场景。
- 代码结构相对复杂,但功能强大,适合复杂的 XML 处理任务。
- 更适合较小的 XML 文档,因为它会将整个文件加载到内存中。
XDocument
(LINQ to XML):- 基于 LINQ 查询,提供了更简洁的代码和灵活的查询功能。
- 代码更简洁,适合需要频繁查询和修改 XML 的场景。
- 在内存管理和性能上相对更高效,适用于大多数常见的 XML 操作。
选择使用 XmlDocument
还是 XDocument
取决于具体需求。如果你更习惯于传统的 DOM 方法,并且需要在内存中完整加载和处理 XML,可以选择 XmlDocument
。如果你更喜欢使用 LINQ 查询来操作 XML,并且希望代码更简洁,XDocument
会是一个更好的选择。
发表回复