如何使用C#读取XML文档?这是很多C#开发者经常遇到的问题。在本篇文章中,会详细介绍C#读取XML的三种实现方式。
一、使用XmlDocument
使用XmlDocument是读取XML文档最简单的方法。XmlDocument是System.Xml命名空间中的一个类,可以用来读取和操作XML文档。
步骤1:引用命名空间
在代码中引用System.Xml命名空间,所以需要先添加using声明。
using System.Xml;
步骤2:创建XmlDocument对象并加载XML文件
- 创建XmlDocument对象。
XmlDocument xmlDoc = new XmlDocument();
- 加载XML文件。
xmlDoc.Load("example.xml");
步骤3:获取XML文件中的数据
使用XmlDocument对象获取节点、属性或文本数据。
- 获取单个节点
首先需要获取XML文件中的一个节点。可以使用GetElementsByTagName()方法或SelectSingleNode()方法来获取节点。
XmlNodeList nodeList = xmlDoc.GetElementsByTagName("book");
XmlNode node = xmlDoc.SelectSingleNode("//book[@id='1']");
- 获取节点属性
string title = node.Attributes["title"].Value;
- 获取节点文本
string author = node["author"].InnerText;
示例说明
我们使用下面这个XML文件作为示例。该文件记录了两本书的信息,每本书包括一个ID、书名、作者和售价。
<?xml version="1.0" encoding="utf-8"?>
<books>
<book id="1">
<title>Book1</title>
<author>Author1</author>
<price>10.0</price>
</book>
<book id="2">
<title>Book2</title>
<author>Author2</author>
<price>15.0</price>
</book>
</books>
我们来读取这个文件中的数据。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("example.xml");
XmlNodeList nodeList = xmlDoc.GetElementsByTagName("book");
foreach (XmlNode node in nodeList)
{
string title = node["title"].InnerText;
string author = node["author"].InnerText;
string price = node["price"].InnerText;
Console.WriteLine("Title:{0}, by {1}, price: {2}", title, author, price);
}
运行结果
Title:Book1, by Author1, price: 10.0
Title:Book2, by Author2, price: 15.0
二、使用LINQ to XML
LINQ to XML是.NET Framework 3.5中引入的。它提供了一种查询XML文档的方式,引入了一些新的类和方法。
步骤1:引用命名空间
在代码中需要使用System.Xml.Linq命名空间,所以需添加using声明。
using System.Xml.Linq;
步骤2:创建XDocument对象并加载XML文件
- 创建XDocument对象。
XDocument xDoc = XDocument.Load("example.xml");
- 加载XML文件。
xDoc.Load("example.xml");
步骤3:使用LINQ to XML查询XML文件中的数据
使用LINQ to XML查询XML文档中的节点、属性或文本数据。
- 获取单个节点
使用Element()方法来获取节点。
XElement bookElement = xDoc.Root.Element("book");
- 获取节点属性
使用Attribute()方法获取节点属性。
string title = (string)bookElement.Attribute("title");
- 获取节点文本
使用Element()方法获取子节点,并使用Value属性获取文本数据。
string author = (string)bookElement.Element("author").Value;
示例说明
使用上面的XML文件作为示例。
XDocument xDoc = XDocument.Load("example.xml");
var query = from book in xDoc.Descendants("book")
select new {Title = (string)book.Element("title"), Author = (string)book.Element("author"), Price = (decimal)book.Element("price")};
foreach (var book in query)
{
Console.WriteLine("Title: {0}, by {1}, price: {2}", book.Title, book.Author, book.Price);
}
运行结果
Title: Book1, by Author1, price: 10.0
Title: Book2, by Author2, price: 15.0
三、使用XmlReader
XmlReader是一个轻量级的XML解析器。它提供了一个流式读取XML文档的方式,可以避免将整个文档加载到内存中,适用于读取大型XML文件。
步骤1:引用命名空间
在代码中需要使用System.Xml命名空间,所以需添加using声明。
using System.Xml;
步骤2:创建XmlReader对象并打开XML文件
- 创建XmlReader对象。
XmlReader xmlReader = XmlReader.Create("example.xml");
- 打开XML文件。
xmlReader.Read();
步骤3:逐个读取XML文件中的元素
使用Read()方法从流中读取下一个XML元素。
- 读取元素名称
使用Name属性读取元素名称。
string elementName = xmlReader.Name;
- 读取元素属性
先使用MoveToFirstAttribute()方法将XmlReader移动到第一个属性,再使用ReadAttributeValue()方法读取属性值。
xmlReader.MoveToFirstAttribute();
string attributeName = xmlReader.Name;
string attributeValue = xmlReader.Value;
- 读取元素文本
使用ReadElementContentAsString()方法读取元素的文本内容。
string text = xmlReader.ReadElementContentAsString();
示例说明
使用上面的XML文件作为示例。
XmlReader xmlReader = XmlReader.Create("example.xml");
while (xmlReader.Read())
{
if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "book")
{
string title = xmlReader.GetAttribute("title");
string author = xmlReader.GetAttribute("author");
decimal price = decimal.Parse(xmlReader.GetAttribute("price"));
Console.WriteLine("Title: {0}, by {1}, price: {2}", title, author, price);
}
}
运行结果
Title: Book1, by Author1, price: 10
Title: Book2, by Author2, price: 15
至此,本文介绍了三种C#读取XML的方式,包括使用XmlDocument、LINQ to XML和XmlReader。每种方式都有其独特的特点,读者可以根据自己的需要选择合适的方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#读取XML的三种实现方式 - Python技术站