C# XmlDocument 常用操作:XML 文件的创建、增删改查完整类

Finn
Finn
发布时间:2026-10-14| 6人浏览过
原创

本文分享一个基于C# System.Xml命名空间的XmlHelper辅助类。该类封装了使用XmlDocument进行XML文档管理的常用方法,包括创建XML文件、插入节点及子元素、更新指定XPath节点的属性与文本值、删除整个节点或特定属性,以及查询单个或列表节点数据。

准备工作

在使用以下代码之前,请确保项目已引入必要的命名空间。

  1. 打开 Visual Studio 或其他 C# 开发环境。
  2. 在代码顶部添加对 System.Xml 的引用,这是处理 XML 的基础库。
using System;
using System.Collections; // 用于 Hashtable
using System.Xml;

第1步:初始化 XmlHelper 类结构

该类的核心在于维护一个全局的 XmlDocument 实例以简化调用。以下是基础的类定义与公共成员变量声明。

namespace Jb51.Com.XmlDAL
{
    public class XmlHelper
    {
        #region 公共变量
        XmlDocument xmldoc;
        XmlNode xmlnode;
        XmlElement xmlelem;
        #endregion
    }

第2步:创建带有根节点的 XML 文档

该方法用于新建一个 XML 文件并写入初始声明和根节点。支持自定义编码格式(如 UTF-8)。

  • 参数:
    FileName: 目标文件路径
    RootName: 根节点名称
    Encode: 编码方式(例如 "utf-8" 或 "gb2312")
  • 返回值: 成功返回 true,异常捕获时返回 false。
public bool CreateXmlDocument(string FileName, string RootName, string Encode)
{
    try
    {
        xmldoc = new XmlDocument();
        XmlDeclaration xmldecl;
        xmldecl = xmldoc.CreateXmlDeclaration("1.0", Encode, null);
        xmldoc.AppendChild(xmldecl);
        xmlelem = xmldoc.CreateElement("", RootName, "");
        xmldoc.AppendChild(xmlelem);
        xmldoc.Save(FileName);
        return true;
    }
    catch (Exception e)
    {
        // 实际应用中建议记录日志而非简单 throw
        return false;
    }
}

创建示例

在 D 盘创建一个名为 keleyimenu.xml 的文档,根节点为 keleyimenu。

XmlHelper m_menu_keleyi_com = new XmlHelper();
m_menu_keleyi_com.CreateXmlDocument(@"D:\kel" + "eyimenu.xml", "ke" + "leyimenu", "utf-8");

生成的初始内容如下:

<?xml version="1.0" encoding="utf-8"?>
<keleyimenu />

第3步:插入新节点及其属性/子节点

通过 XPath 定位父节点,并在其后追加新的 XmlElement。支持为节点设置属性字典和子节点文本字典。

  • 参数说明:
    faterNode: 要追加的子节点的父节点的 XPath。
    HasAttributes: 布尔值,指示是否包含属性。
    htAtt: Hashtable,Key 为属性名,Value 为属性值。
    htSubNode: Hashtable,Key 为子节点名称,Value 为内部文本 (InnerText)。
public bool InsertNode(string XmlFile, string NewNodeName, bool HasAttributes, 
                       string fatherNode, Hashtable htAtt, Hashtable htSubNode)
{
    try
    {
        xmldoc = new XmlDocument();
        xmldoc.Load(XmlFile);
        XmlNode root = xmldoc.SelectSingleNode(fatherNode);
        xmlelem = xmldoc.CreateElement(NewNodeName);

        if (htAtt != null && HasAttributes)
        {
            SetAttributes(xmlelem, htAtt);
            SetNodes(xmlelem.Name, xmldoc, xmlelem, htSubNode);
        }
        else
        {
            SetNodes(xmlelem.Name, xmldoc, xmlelem, htSubNode);
        }

        root.AppendChild(xmlelem); // 注意:此处逻辑是将新元素添加到查找到的 root 下
        xmldoc.Save(XmlFile);
        return true;
    }
    catch (Exception e)
    {
        throw new Exception(e.Message);
    }
}

第4步:更新节点的属性与子节点文本

遍历指定的父节点下的所有子节点列表,匹配哈希表中的 Key,更新对应的属性值或文本内容。

public bool UpdateNode(string XmlFile, string fatherNode, Hashtable htAtt, Hashtable htSubNode)
{
    try
    {
        xmldoc = new XmlDocument();
        xmldoc.Load(XmlFile);
        XmlNodeList root = xmldoc.SelectSingleNode(fatherNode).ChildNodes;
        UpdateNodes(root, htAtt, htSubNode); // 内部私有方法执行具体更新
        xmldoc.Save(XmlFile);
        return true;
    }
    catch (Exception e)
    {
        throw new Exception(e.Message);
    }
}

更新实现的私有逻辑

// 设置节点属性
private void SetAttributes(XmlElement xe, Hashtable htAttribute)
{
    foreach (DictionaryEntry de in htAttribute)
    {
        xe.SetAttribute(de.Key.ToString(), de.Value.ToString());
    }
}

// 更新节点属性和子节点InnerText值
private void UpdateNodes(XmlNodeList root, Hashtable htAtt, Hashtable htSubNode)
{
    foreach (XmlNode xn in root)
    {
        xmlelem = (XmlElement)xn;
        // 更新属性
        if (xmlelem.HasAttributes)
        {
            foreach (DictionaryEntry de in htAtt)
            {
                if (xmlelem.HasAttribute(de.Key.ToString()))
                {
                    xmlelem.SetAttribute(de.Key.ToString(), de.Value.ToString());
                }
            }
        }
        // 更新子节点内容
        if (xmlelem.HasChildNodes)
        {
            XmlNodeList xnl = xmlelem.ChildNodes;
            foreach (XmlNode xn1 in xnl)
            {
                XmlElement xe = (XmlElement)x
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。