当前位置: 首页 > news >正文

【干货集】C# XmlHelper帮助类操作Xml文档的通用方法汇总

前言

该篇文章主要总结的是自己平时工作中使用频率比较高的Xml文档操作的一些常用方法和收集网上写的比较好的一些通用Xml文档操作的方法(主要包括Xml序列化和反序列化,Xml文件读取,Xml文档节点内容增删改的一些通过方法)。当然可能还有很多方法会漏了,假如各位同学好的方法可以在文末留言,我会统一收集起来。

C#XML基础入门

C# XML基础入门(XML文件内容增删改查清)👉‍

Xml反序列化为对象

#region Xml反序列化为对象/// <summary>/// Xml反序列化为指定模型对象/// </summary>/// <typeparam name="T">对象类型</typeparam>/// <param name="xmlContent">Xml内容</param>/// <param name="isThrowException">是否抛出异常</param>/// <returns></returns>public static T XmlConvertToModel<T>(string xmlContent, bool isThrowException = false) where T : class{StringReader stringReader = null;try{XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));stringReader = new StringReader(xmlContent);return (T)xmlSerializer.Deserialize(stringReader);}catch (Exception ex){if (isThrowException){throw ex;}return null;}finally{stringReader?.Dispose();}}/// <summary>     /// 读取Xml文件内容反序列化为指定的对象  /// </summary>    /// <param name="filePath">Xml文件的位置(绝对路径)</param>  /// <returns></returns>    public static T DeserializeFromXml<T>(string filePath){try{if (!File.Exists(filePath))throw new ArgumentNullException(filePath + " not Exists");using (StreamReader reader = new StreamReader(filePath)){XmlSerializer xs = new XmlSerializer(typeof(T));T ret = (T)xs.Deserialize(reader);return ret;}}catch (Exception ex){return default(T);}}#endregion

对象序列化为Xml


#region 对象序列化为Xml/// <summary>/// 对象序列化为Xml/// </summary>/// <param name="obj">对象</param>/// <param name="isThrowException">是否抛出异常</param>/// <returns></returns>public static string ObjectSerializerXml<T>(T obj, bool isThrowException = false){if (obj == null){return string.Empty;}try{using (StringWriter sw = new StringWriter()){Type t = obj.GetType();//强制指定命名空间,覆盖默认的命名空间  XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();//在Xml序列化时去除默认命名空间xmlns:xsd和xmlns:xsinamespaces.Add(string.Empty, string.Empty);XmlSerializer serializer = new XmlSerializer(obj.GetType());//序列化时增加namespacesserializer.Serialize(sw, obj, namespaces);sw.Close();string replaceStr = sw.ToString().Replace(@"<?xml version=""1.0"" encoding=""utf-16""?>", "");return replaceStr;}}catch (Exception ex){if (isThrowException){throw ex;}return string.Empty;}}#endregion

Xml字符处理

#region Xml字符处理/// <summary>/// 特殊符号转换为转义字符/// </summary>/// <param name="xmlStr"></param>/// <returns></returns>public string XmlSpecialSymbolConvert(string xmlStr){return xmlStr.Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;").Replace("\'", "&apos;").Replace("\"", "&quot;");}#endregion

创建Xml文档


#region 创建Xml文档/// <summary>/// 创建Xml文档/// </summary>/// <param name="saveFilePath">文件保存位置</param>public void CreateXmlDocument(string saveFilePath){XmlDocument xmlDoc = new XmlDocument();//创建类型声明节点  XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");xmlDoc.AppendChild(node);//创建Xml根节点XmlNode root = xmlDoc.CreateElement("books");xmlDoc.AppendChild(root);XmlNode root1 = xmlDoc.CreateElement("book");root.AppendChild(root1);//创建子节点CreateNode(xmlDoc, root1, "author", "追逐时光者");CreateNode(xmlDoc, root1, "title", "XML学习教程");CreateNode(xmlDoc, root1, "publisher", "时光出版社");//将文件保存到指定位置xmlDoc.Save(saveFilePath/*"D://xmlSampleCreateFile.xml"*/);}/// <summary>    /// 创建节点    /// </summary>    /// <param name="xmlDoc">xml文档</param>    /// <param name="parentNode">Xml父节点</param>    /// <param name="name">节点名</param>    /// <param name="value">节点值</param>    ///   public void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value){//创建对应Xml节点元素XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);node.InnerText = value;parentNode.AppendChild(node);}#endregion

Xml数据读取


#region Xml数据读取/// <summary>/// 读取Xml指定节点中的数据/// </summary>/// <param name="filePath">Xml文档路径</param>/// <param name="node">节点</param>/// <param name="attribute">读取数据的属性名</param>/// <returns>string</returns>/*************************************************** 使用示列:* XmlHelper.XmlReadNodeAttributeValue(path, "/books/book", "author")************************************************/public static string XmlReadNodeAttributeValue(string filePath, string node, string attribute){string value = "";try{XmlDocument doc = new XmlDocument();doc.Load(filePath);XmlNode xmlNode = doc.SelectSingleNode(node);value = (attribute.Equals("") ? xmlNode.InnerText : xmlNode.Attributes[attribute].Value);}catch { }return value;}/// <summary>/// 获得xml文件中指定节点的节点数据/// </summary>/// <param name="filePath">Xml文档路径</param>/// <param name="nodeName">节点名</param>/// <returns></returns>public static string GetNodeInfoByNodeName(string filePath, string nodeName){string XmlString = string.Empty;XmlDocument xml = new XmlDocument();xml.Load(filePath);XmlElement root = xml.DocumentElement;XmlNode node = root.SelectSingleNode("//" + nodeName);if (node != null){XmlString = node.InnerText;}return XmlString;}/// <summary>/// 获取某一节点的所有孩子节点的值/// </summary>/// <param name="node">要查询的节点</param>/// <param name="filePath">Xml文档路径</param>public string[] ReadAllChildallValue(string node, string filePath){int i = 0;string[] str = { };XmlDocument doc = new XmlDocument();doc.Load(filePath);XmlNode xn = doc.SelectSingleNode(node);XmlNodeList nodelist = xn.ChildNodes;  //得到该节点的子节点if (nodelist.Count > 0){str = new string[nodelist.Count];foreach (XmlElement el in nodelist)//读元素值{str[i] = el.Value;i++;}}return str;}/// <summary>/// 获取某一节点的所有孩子节点的值/// </summary>/// <param name="node">要查询的节点</param>/// <param name="filePath">Xml文档路径</param>public XmlNodeList ReadAllChild(string node, string filePath){XmlDocument doc = new XmlDocument();doc.Load(filePath);XmlNode xn = doc.SelectSingleNode(node);XmlNodeList nodelist = xn.ChildNodes;  //得到该节点的子节点return nodelist;}#endregion

Xml插入数据

#region Xml插入数据/// <summary>/// Xml指定节点元素属性插入数据/// </summary>/// <param name="path">路径</param>/// <param name="node">节点</param>/// <param name="element">元素名</param>/// <param name="attribute">属性名</param>/// <param name="value">属性数据</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.XmlInsertValue(path, "/books", "book", "author", "Value")************************************************/public static void XmlInsertValue(string path, string node, string element, string attribute, string value){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xmlNode = doc.SelectSingleNode(node);if (element.Equals("")){if (!attribute.Equals("")){XmlElement xe = (XmlElement)xmlNode;xe.SetAttribute(attribute, value);}}else{XmlElement xe = doc.CreateElement(element);if (attribute.Equals(""))xe.InnerText = value;elsexe.SetAttribute(attribute, value);//添加新增的节点xmlNode.AppendChild(xe);}//保存Xml文档doc.Save(path);}catch { }}#endregion

Xml修改数据


#region Xml修改数据/// <summary>/// Xml指定节点元素属性修改数据/// </summary>/// <param name="path">路径</param>/// <param name="node">节点</param>/// <param name="attribute">属性名</param>/// <param name="value">属性数据</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.XmlUpdateValue(path, "/books", "book","author","Value")************************************************/public static void XmlUpdateValue(string path, string node, string attribute, string value){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xmlNode = doc.SelectSingleNode(node);XmlElement xmlElement = (XmlElement)xmlNode;if (attribute.Equals(""))xmlElement.InnerText = value;elsexmlElement.SetAttribute(attribute, value);//保存Xml文档doc.Save(path);}catch { }}#endregion

Xml删除数据


#region Xml删除数据/// <summary>/// 删除数据/// </summary>/// <param name="path">路径</param>/// <param name="node">节点</param>/// <param name="attribute">属性名</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.XmlDelete(path, "/books", "book")************************************************/public static void XmlDelete(string path, string node, string attribute){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xn = doc.SelectSingleNode(node);XmlElement xe = (XmlElement)xn;if (attribute.Equals(""))xn.ParentNode.RemoveChild(xn);elsexe.RemoveAttribute(attribute);doc.Save(path);}catch { }}#endregion

完整的XmlHelper帮助类

注意:有些方法不能保证百分之百没有问题的,假如有问题可以留言给我,我会验证并立即修改。


/// <summary>/// Xml帮助类/// </summary>public class XMLHelper
{#region Xml反序列化为对象/// <summary>/// Xml反序列化为指定模型对象/// </summary>/// <typeparam name="T">对象类型</typeparam>/// <param name="xmlContent">Xml内容</param>/// <param name="isThrowException">是否抛出异常</param>/// <returns></returns>public static T XmlConvertToModel<T>(string xmlContent, bool isThrowException = false) where T : class
{StringReader stringReader = null;try{XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));stringReader = new StringReader(xmlContent);return (T)xmlSerializer.Deserialize(stringReader);}catch (Exception ex){if (isThrowException){throw ex;}return null;}finally{stringReader?.Dispose();}}/// <summary>     /// 读取Xml文件内容反序列化为指定的对象  /// </summary>    /// <param name="filePath">Xml文件的位置(绝对路径)</param>  /// <returns></returns>    public static T DeserializeFromXml<T>(string filePath){try{if (!File.Exists(filePath))throw new ArgumentNullException(filePath + " not Exists");using (StreamReader reader = new StreamReader(filePath)){XmlSerializer xs = new XmlSerializer(typeof(T));T ret = (T)xs.Deserialize(reader);return ret;}}catch (Exception ex){return default(T);}}#endregion#region 对象序列化为Xml/// <summary>/// 对象序列化为Xml/// </summary>/// <param name="obj">对象</param>/// <param name="isThrowException">是否抛出异常</param>/// <returns></returns>public static string ObjectSerializerXml<T>(T obj, bool isThrowException = false){if (obj == null){return string.Empty;}try{using (StringWriter sw = new StringWriter()){Type t = obj.GetType();//强制指定命名空间,覆盖默认的命名空间  XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();//在Xml序列化时去除默认命名空间xmlns:xsd和xmlns:xsinamespaces.Add(string.Empty, string.Empty);XmlSerializer serializer = new XmlSerializer(obj.GetType());//序列化时增加namespacesserializer.Serialize(sw, obj, namespaces);sw.Close();string replaceStr = sw.ToString().Replace(@"<?xml version=""1.0"" encoding=""utf-16""?>", "");return replaceStr;}}catch (Exception ex){if (isThrowException){throw ex;}return string.Empty;}}#endregion#region Xml字符处理/// <summary>/// 特殊符号转换为转义字符/// </summary>/// <param name="xmlStr"></param>/// <returns></returns>public string XmlSpecialSymbolConvert(string xmlStr){return xmlStr.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\'", "&apos;").Replace("\"", """);}#endregion#region 创建Xml文档/// <summary>/// 创建Xml文档/// </summary>/// <param name="saveFilePath">文件保存位置</param>public void CreateXmlDocument(string saveFilePath){XmlDocument xmlDoc = new XmlDocument();//创建类型声明节点  XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");xmlDoc.AppendChild(node);//创建Xml根节点XmlNode root = xmlDoc.CreateElement("books");xmlDoc.AppendChild(root);XmlNode root1 = xmlDoc.CreateElement("book");root.AppendChild(root1);//创建子节点CreateNode(xmlDoc, root1, "author", "追逐时光者");CreateNode(xmlDoc, root1, "title", "XML学习教程");CreateNode(xmlDoc, root1, "publisher", "时光出版社");//将文件保存到指定位置xmlDoc.Save(saveFilePath/*"D://xmlSampleCreateFile.xml"*/);}/// <summary>    /// 创建节点    /// </summary>    /// <param name="xmlDoc">xml文档</param>    /// <param name="parentNode">Xml父节点</param>    /// <param name="name">节点名</param>    /// <param name="value">节点值</param>    ///   public void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value){//创建对应Xml节点元素XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);node.InnerText = value;parentNode.AppendChild(node);}#endregion#region Xml数据读取/// <summary>/// 读取Xml指定节点中的数据/// </summary>/// <param name="filePath">Xml文档路径</param>/// <param name="node">节点</param>/// <param name="attribute">读取数据的属性名</param>/// <returns>string</returns>/*************************************************** 使用示列:* XmlHelper.XmlReadNodeAttributeValue(path, "/books/book", "author")************************************************/public static string XmlReadNodeAttributeValue(string filePath, string node, string attribute){string value = "";try{XmlDocument doc = new XmlDocument();doc.Load(filePath);XmlNode xmlNode = doc.SelectSingleNode(node);value = (attribute.Equals("") ? xmlNode.InnerText : xmlNode.Attributes[attribute].Value);}catch { }return value;}/// <summary>/// 获得xml文件中指定节点的节点数据/// </summary>/// <param name="filePath">Xml文档路径</param>/// <param name="nodeName">节点名</param>/// <returns></returns>public static string GetNodeInfoByNodeName(string filePath, string nodeName){string XmlString = string.Empty;XmlDocument xml = new XmlDocument();xml.Load(filePath);XmlElement root = xml.DocumentElement;XmlNode node = root.SelectSingleNode("//" + nodeName);if (node != null){XmlString = node.InnerText;}return XmlString;}/// <summary>/// 获取某一节点的所有孩子节点的值/// </summary>/// <param name="node">要查询的节点</param>/// <param name="filePath">Xml文档路径</param>public string[] ReadAllChildallValue(string node, string filePath){int i = 0;string[] str = { };XmlDocument doc = new XmlDocument();doc.Load(filePath);XmlNode xn = doc.SelectSingleNode(node);XmlNodeList nodelist = xn.ChildNodes;  //得到该节点的子节点if (nodelist.Count > 0){str = new string[nodelist.Count];foreach (XmlElement el in nodelist)//读元素值{str[i] = el.Value;i++;}}return str;}/// <summary>/// 获取某一节点的所有孩子节点的值/// </summary>/// <param name="node">要查询的节点</param>/// <param name="filePath">Xml文档路径</param>public XmlNodeList ReadAllChild(string node, string filePath){XmlDocument doc = new XmlDocument();doc.Load(filePath);XmlNode xn = doc.SelectSingleNode(node);XmlNodeList nodelist = xn.ChildNodes;  //得到该节点的子节点return nodelist;}#endregion#region Xml插入数据/// <summary>/// Xml指定节点元素属性插入数据/// </summary>/// <param name="path">路径</param>/// <param name="node">节点</param>/// <param name="element">元素名</param>/// <param name="attribute">属性名</param>/// <param name="value">属性数据</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.XmlInsertValue(path, "/books", "book", "author", "Value")************************************************/public static void XmlInsertValue(string path, string node, string element, string attribute, string value){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xmlNode = doc.SelectSingleNode(node);if (element.Equals("")){if (!attribute.Equals("")){XmlElement xe = (XmlElement)xmlNode;xe.SetAttribute(attribute, value);}}else{XmlElement xe = doc.CreateElement(element);if (attribute.Equals(""))xe.InnerText = value;elsexe.SetAttribute(attribute, value);//添加新增的节点xmlNode.AppendChild(xe);}//保存Xml文档doc.Save(path);}catch { }}#endregion#region Xml修改数据/// <summary>/// Xml指定节点元素属性修改数据/// </summary>/// <param name="path">路径</param>/// <param name="node">节点</param>/// <param name="attribute">属性名</param>/// <param name="value">属性数据</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.XmlUpdateValue(path, "/books", "book","author","Value")************************************************/public static void XmlUpdateValue(string path, string node, string attribute, string value){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xmlNode = doc.SelectSingleNode(node);XmlElement xmlElement = (XmlElement)xmlNode;if (attribute.Equals(""))xmlElement.InnerText = value;elsexmlElement.SetAttribute(attribute, value);//保存Xml文档doc.Save(path);}catch { }}#endregion#region Xml删除数据/// <summary>/// 删除数据/// </summary>/// <param name="path">路径</param>/// <param name="node">节点</param>/// <param name="attribute">属性名</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.XmlDelete(path, "/books", "book")************************************************/public static void XmlDelete(string path, string node, string attribute){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xn = doc.SelectSingleNode(node);XmlElement xe = (XmlElement)xn;if (attribute.Equals(""))xn.ParentNode.RemoveChild(xn);elsexe.RemoveAttribute(attribute);doc.Save(path);}catch { }}#endregion}
http://www.lryc.cn/news/332333.html

相关文章:

  • Coursera自然语言处理专项课程04:Natural Language Processing with Attention Models笔记 Week01
  • mysql MHA高可用
  • android 扫描二维码
  • [flink 实时流基础] 输出算子(Sink)
  • case语句
  • 全国加油站分布数据/停车场分布/公园分布/景区分布/保护区分布/poi感兴趣点
  • 单片机简介(一)
  • Naiveui将message挂载到axios拦截器
  • MySQL、Oracle查看字节和字符长度个数的函数
  • 第五篇:3.4 用户归因和受众(User attribution and audience) - IAB/MRC及《增强现实广告效果测量指南1.0》
  • ES6: class类
  • [中级]软考_软件设计_计算机组成与体系结构_08_输入输出技术
  • 2024-04-04 问AI: 在深度学习中,微调是什么?
  • db2数据仓库集群的搭建
  • Linux ARM平台开发系列讲解(u-boot篇) 5.1 u-boot的启动流程分析(ARMv8-a)
  • ST表(数据结构中的问题)
  • 一、OpenCV(C#版本)环境搭建
  • ubuntu远程服务部署,Docker,蓝牙无线局域网,SSH,VNC,xfce4,NextTerminal,宝塔,NPS/NPC,gost,openwrt
  • kettle安装与部署使用教程
  • 【C语言】编译和链接
  • Python学习: 错误和异常
  • WebGIS 之 vue3+vite+ceisum
  • ## CSDN创作活动:AI技术创业有哪些机会?
  • 中医肝胆笔记
  • 理解Go语言中break语句是如何工作的
  • 11. 瀑布流布局
  • Flutter-发布插件到pub上传不上问题
  • Windows 2008虚拟机安装、安装VM Tools、快照和链接克隆、添加硬盘修改格式为GPT
  • c++的学习之路:12、vector(1)
  • 2024.2.17力扣每日一题——N叉树的层序遍历