C# XMLHelper类通用操作方法汇总
本文将详细介绍如何利用C#中的 XmlSerializer和XmlDocument类来构建一个通用的 XmlHelper工具类,实现XML文件的生成、读取、增删改查以及对象的序列化与反序列化。
准备工作
在开始之前,请确保您的开发环境支持C#4.0及以上版本,并在项目中引入了必要的命名空间:
System.XmlSystem.Xml.SerializationSystem.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序列化和反序列化的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









