C# Programming

C#高效XML解析:XmlDocument与XDocument

Spread the love

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)。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注