C# 提供了强大的 XML 文件处理支持,方便读取和解析。本文探讨两种主要方法:使用XmlDocument
类(DOM 方法)和XDocument
类(LINQ to XML 方法)。我们将检查每种方法,突出它们的优势以及何时使用它们。
目录
使用 XmlDocument(DOM 方法)
XmlDocument
类以树状结构在内存中表示 XML 文件。这对于需要大量操作 XML 结构的场景非常理想。
using System;
using System.Xml;
public class XmlDocumentExample
{
public static void Main(string[] args)
{
string xmlFilePath = "data.xml"; // 请替换为您的 XML 文件路径
try
{
XmlDocument doc = new XmlDocument();
doc.Load(xmlFilePath);
// 访问根元素
XmlNode root = doc.DocumentElement;
Console.WriteLine($"根元素: {root.Name}");
// 导航和访问节点
XmlNodeList nodes = root.SelectNodes("//elementName/subElement"); // XPath 示例
foreach (XmlNode node in nodes)
{
Console.WriteLine($"元素: {node.Name}, 值: {node.InnerText}");
}
}
catch (Exception ex)
{
Console.WriteLine($"错误: {ex.Message}");
}
}
}
此改进后的示例使用 XPath 进行更高效的节点选择。请记住将“data.xml”和"//elementName/subElement"
替换为您的文件路径和相应的 XPath 表达式。
使用 XDocument(LINQ to XML 方法)
LINQ to XML 提供了一种更流畅、更高效的解析 XML 的方法,尤其对于大型文件而言。其查询语法简化了数据提取。
using System;
using System.Linq;
using System.Xml.Linq;
public class XDocumentExample
{
public static void Main(string[] args)
{
string xmlFilePath = "data.xml"; // 请替换为您的 XML 文件路径
try
{
XDocument doc = XDocument.Load(xmlFilePath);
// LINQ to XML 查询
var results = doc.Descendants("elementName")
.Select(el => new
{
SubElement1 = el.Element("subElement1")?.Value,
SubElement2 = (string)el.Attribute("attributeName") // 访问属性
});
foreach (var result in results)
{
Console.WriteLine($"SubElement1: {result.SubElement1}, SubElement2: {result.SubElement2}");
}
}
catch (Exception ex)
{
Console.WriteLine($"错误: {ex.Message}");
}
}
}
此示例演示了使用 LINQ 查询元素和属性。空条件运算符 (?.
) 可以优雅地处理潜在的空值。
选择正确的方法
最佳方法取决于您的需求:
- 对于复杂的 XML 操作和需要对解析过程进行细粒度控制的场景,请使用
XmlDocument
。它适用于较小的 XML 文件,其中将整个文档加载到内存中不是问题。 - 对于更简单的解析任务,尤其是在处理大型 XML 文件时,请使用
XDocument
。其内存效率和简化的语法使其成为大型数据集的更有效选择。
请记住在代码中适当地处理潜在的异常(如FileNotFoundException
)。