C# XMLHelper类通用操作方法汇总

山海之间
山海之间
发布时间:2026-10-13| 8人浏览过
原创

本文将详细介绍如何利用C#中的 XmlSerializer和XmlDocument类来构建一个通用的 XmlHelper工具类,实现XML文件的生成、读取、增删改查以及对象的序列化与反序列化。

准备工作

在开始之前,请确保您的开发环境支持C#4.0及以上版本,并在项目中引入了必要的命名空间:

  • System.Xml
  • System.Xml.Serialization
  • System.IO

序列化:将对象转换为XML字符串或文件

第1步:定义待序列化的实体类

例如,我们定义一个包含书名、作者信息的书籍模型类,并在属性上标注 [XmlElement]或[XmlAttribute]等特性以控制XML输出格式:

// 示例Model
public class Book
{
    public string Title { get; set; }
    public string Author { get; set; }
}

第2步:调用序列化方法

使用以下方法可将对象实例转为XML格式的字符串(默认移除冗余命名空间):

public static string ObjectToXmlString(object obj)
{
    if (obj == null) return "";
    var xmlSerializer = new XmlSerializer(obj.GetType());
    using (var sw = new StringWriter())
    {
        var ns = new XmlSerializerNamespaces();
        ns.Add("", ""); // 去除xmlns前缀
        xmlSerializer.Serialize(sw, obj, ns);
        return sw.ToString().Replace("<?xml version=""1.0"" encoding=""utf-16""?>", "");
    }
}

反序列化:将XML字符串或文件还原为对象

第1步:从字符串或文件中读取XML内容

第2步:执行反序列化操作

利用 StringReader或StreamReader加载文本后,交由 XmlSerializer转换回目标类型T:

public static T StringXmlToObject<T>(string xmlContent)
{
    using (var sr = new StringReader(xmlContent))
    {
        var xs = new XmlSerializer(typeof(T));
        return (T)xs.Deserialize(sr);
    }
}
public static T FileXmlToObject<T>(string filePath)
{
    using (var sr = new StreamReader(filePath))
    {
        var xs = new XmlSerializer(typeof(T));
        return (T)xs.Deserialize(sr);
    }
}

基础增删改查(CRUD)操作

第1步:创建并写入XML文件

若需要从零创建一个XML文件,可使用 XmlDocument设置声明头、根节点并保存至磁盘:

public void CreateAndSaveXml(string path)
{
    var doc = new XmlDocument();
    doc.AppendChild(doc.CreateXmlDeclaration("1.0", "utf-8", null));
    var root = doc.CreateElement("Books");
    doc.AppendChild(root);
    
    var node = doc.CreateElement("book");
    node.AppendChild(doc.CreateElement("Author")).InnerText = "张三";
    node.AppendChild(doc.CreateElement("Title")).InnerText = "C#入门到精通";
    root.AppendChild(node);
    
    doc.Save(path);
}

第2步:读取指定节点值

通过 XPath 路径定位目标节点并提取其文本内容:

public string ReadNodeValue(string filePath, string xpath)
{
    var doc = new XmlDocument();
    doc.Load(filePath);
    var target = doc.SelectSingleNode(xpath);
    return target?.InnerText ?? string.Empty;
}

第3步:插入子节点

在现有节点下追加新元素并重新保存:

public void InsertNode(string filePath, string parentXPath, string nodeName, string value)
{
    var doc = new XmlDocument();
    doc.Load(filePath);
    var parent = doc.SelectSingleNode(parentXPath);
    var newNode = doc.CreateElement(nodeName);
    newNode.InnerText = value;
    parent.AppendChild(newNode);
    doc.Save(filePath);
}

第4步:更新与删除节点

修改指定节点的内容或删除某个标签:

public void UpdateNodeValue(string filePath, string xpath, string newValue)
{
    var doc = new XmlDocument();
    doc.Load(filePath);
    var target = doc.SelectSingleNode(xpath);
    target.InnerText = newValue;
    doc.Save(filePath);
}
public void DeleteNodeByPath(string filePath, string xpath)
{
    var doc = new XmlDocument();
    doc.Load(filePath);
    var target = doc.SelectSingleNode(xpath);
    if(target != null) target.ParentNode.RemoveChild(target);
    doc.Save(filePath);
}

注意事项

在使用上述工具进行XML处理时,务必保证编码格式的一致性。如果涉及到特殊字符转义,请使用内置的 HttpUtility.HtmlEncode()等方法避免产生非法字符。

以上就是关于C# XMLHelper类的详细内容,更多关于XML序列化和反序列化的资料请关注本站其它相关文章!

相关标签:

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

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 算法库。