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

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

本文将详细介绍如何利用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 相关产品和应用

全部下载

专题列表