下面是“C# 解析XML和反序列化的示例”的完整攻略。
1. 简介
在 C# 中,解析 XML 和反序列化是非常常见的操作。本文将提供两个示例来演示如何完成这两个操作。
2. 解析XML
解析 XML 的核心是使用 .NET Framework 提供的 XmlDocument 类。这个类提供了许多方法来操作 XML。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml("<book><title>Harry Potter</title><author>J. K. Rowling</author></book>");
XmlNode rootNode = xmlDoc.FirstChild;
XmlNode titleNode = rootNode.SelectSingleNode("title");
string title = titleNode.InnerText;
XmlNode authorNode = rootNode.SelectSingleNode("author");
string author = authorNode.InnerText;
这个示例创建了一个 XmlDocument 实例,并使用 LoadXml 方法来加载 XML。然后,使用 SelectSingleNode 方法检索节点,最后获取节点的 InnerText 即可。
3. 反序列化
反序列化是将 XML 文档转换为 .NET 对象的过程。在 C# 中,通常使用 XmlSerializer 类进行反序列化。
下面是一个简单示例:
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
}
XmlSerializer serializer = new XmlSerializer(typeof(Book));
XmlReader reader = XmlReader.Create(new StringReader("<Book><Title>Harry Potter</Title><Author>J. K. Rowling</Author></Book>"));
Book book = (Book)serializer.Deserialize(reader);
在本例中,我们定义了一个 Book 类。然后,使用 XmlSerializer 类将 XML 转换为 Book 实例。
4. 示例说明
示例1:解析XML
假设我们有一个 XML 文档如下:
<products>
<product id="1">
<name>iPhone XR</name>
<description>The latest iPhone from Apple.</description>
<price>799</price>
</product>
<product id="2">
<name>Samsung Galaxy S10</name>
<description>The latest smartphone from Samsung.</description>
<price>899</price>
</product>
</products>
我们可以使用以下代码来解析 XML:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlString);
XmlNodeList productsNodeList = xmlDoc.SelectNodes("/products/product");
foreach (XmlNode productNode in productsNodeList)
{
string id = productNode.Attributes["id"].Value;
XmlNode nameNode = productNode.SelectSingleNode("name");
string name = nameNode.InnerText;
XmlNode descriptionNode = productNode.SelectSingleNode("description");
string description = descriptionNode.InnerText;
XmlNode priceNode = productNode.SelectSingleNode("price");
string price = priceNode.InnerText;
Console.WriteLine($"ID: {id}, Name: {name}, Description: {description}, Price: {price}");
}
其中,xmlString 是输入的 XML 字符串,上述代码将输出以下内容:
ID: 1, Name: iPhone XR, Description: The latest iPhone from Apple., Price: 799
ID: 2, Name: Samsung Galaxy S10, Description: The latest smartphone from Samsung., Price: 899
示例2:反序列化
假设我们有一个包含 Book 对象的 XML 文件如下:
<Books>
<Book>
<Title>Harry Potter</Title>
<Author>J. K. Rowling</Author>
</Book>
<Book>
<Title>The Hunger Games</Title>
<Author>Suzanne Collins</Author>
</Book>
</Books>
我们定义一个 Book 类,并使用 XmlSerializer 类来反序列化 XML 文件如下:
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
}
XmlSerializer serializer = new XmlSerializer(typeof(List<Book>), new XmlRootAttribute("Books"));
List<Book> booksList;
using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
booksList = (List<Book>)serializer.Deserialize(stream);
}
其中,filename 是包含 XML 的文件名称。上述代码将反序列化 XML 并将其转换为一个 List
5. 总结
解析 XML 和反序列化是 C# 编程中经常需要用到的技能。使用 XmlDocument 类可以很容易地解析 XML,而 XmlSerializer 类则可以将 XML 转换为其他类型的对象。在处理 XML 时,请注意处理可能出现的异常,如未找到节点、类型转换异常等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 解析XML和反序列化的示例 - Python技术站