服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#对XmlHelper帮助类操作Xml文档的通用方法汇总

C#对XmlHelper帮助类操作Xml文档的通用方法汇总

2023-02-24 15:07追逐时光者 C#

该篇文章主要总结的是自己平时工作中使用频率比较高的Xml文档操作的一些常用方法和收集网上写的比较好的一些通用Xml文档操作的方法,对C# XmlHelper帮助类操作Xml文档相关知识感兴趣的朋友一起看看吧

前言

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

C#XML基础入门

Xml反序列化为对象

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#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)
                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;
                return default(T);
        #endregion

对象序列化为Xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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:xsi
                    namespaces.Add(string.Empty, string.Empty);
                    XmlSerializer serializer = new XmlSerializer(obj.GetType());
                    //序列化时增加namespaces
                    serializer.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;
        }
        #endregion

Xml字符处理

?
1
2
3
4
5
6
7
8
9
10
11
12
#region Xml字符处理
 
        /// <summary>
        /// 特殊符号转换为转义字符
        /// </summary>
        /// <param name="xmlStr"></param>
        /// <returns></returns>
        public string XmlSpecialSymbolConvert(string xmlStr)
        {
            return xmlStr.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\'", "&apos;").Replace("\"", """);
        }
        #endregion

创建Xml文档

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#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数据读取

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#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;
        }
        /// 获得xml文件中指定节点的节点数据
        /// <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;
        /// 获取某一节点的所有孩子节点的值
        /// <param name="node">要查询的节点</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;
        public XmlNodeList ReadAllChild(string node, string filePath)
            return nodelist;
        #endregion

Xml插入数据

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#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;
                    else
                    //添加新增的节点
                    xmlNode.AppendChild(xe);
                //保存Xml文档
                doc.Save(path);
            }
            catch { }
        }
        #endregion

Xml修改数据

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#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;
                else
                    xmlElement.SetAttribute(attribute, value);
                //保存Xml文档
                doc.Save(path);
            }
            catch { }
        }
        #endregion

Xml删除数据

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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);
                else
                    xe.RemoveAttribute(attribute);
                doc.Save(path);
            }
            catch { }
        }
        #endregion

完整的XmlHelper帮助类

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
/// <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)
                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;
                return default(T);
        #endregion
        #region 对象序列化为Xml
        /// 对象序列化为Xml
        /// <param name="obj">对象</param>
        public static string ObjectSerializerXml<T>(T obj, bool isThrowException = false)
            if (obj == null)
                return string.Empty;
                using (StringWriter sw = new StringWriter())
                    Type t = obj.GetType();
                    //强制指定命名空间,覆盖默认的命名空间 
                    XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
                    //在Xml序列化时去除默认命名空间xmlns:xsd和xmlns:xsi
                    namespaces.Add(string.Empty, string.Empty);
                    XmlSerializer serializer = new XmlSerializer(obj.GetType());
                    //序列化时增加namespaces
                    serializer.Serialize(sw, obj, namespaces);
                    sw.Close();
                    string replaceStr = sw.ToString().Replace(@"<?xml version=""1.0"" encoding=""utf-16""?>", "");
                    return replaceStr;
        #region Xml字符处理
        /// 特殊符号转换为转义字符
        /// <param name="xmlStr"></param>
        public string XmlSpecialSymbolConvert(string xmlStr)
            return xmlStr.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\'", "&apos;").Replace("\"", """);
        #region 创建Xml文档
        /// 创建Xml文档
        /// <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>   
        /// 创建节点   
        /// <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);
        #region Xml数据读取
        /// 读取Xml指定节点中的数据
        /// <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 = "";
                XmlDocument doc = new XmlDocument();
                doc.Load(filePath);
                XmlNode xmlNode = doc.SelectSingleNode(node);
                value = (attribute.Equals("") ? xmlNode.InnerText : xmlNode.Attributes[attribute].Value);
            catch { }
            return value;
        /// 获得xml文件中指定节点的节点数据
        /// <param name="nodeName">节点名</param>
        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;
        /// 获取某一节点的所有孩子节点的值
        /// <param name="node">要查询的节点</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;
        public XmlNodeList ReadAllChild(string node, string filePath)
            return nodelist;
        #region Xml插入数据
        /// Xml指定节点元素属性插入数据
        /// <param name="path">路径</param>
        /// <param name="element">元素名</param>
        /// <param name="attribute">属性名</param>
        /// <param name="value">属性数据</param>
         * XmlHelper.XmlInsertValue(path, "/books", "book", "author", "Value")
        public static void XmlInsertValue(string path, string node, string element, string attribute, string value)
                doc.Load(path);
                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;
                    else
                    //添加新增的节点
                    xmlNode.AppendChild(xe);
                //保存Xml文档
                doc.Save(path);
        #region Xml修改数据
        /// Xml指定节点元素属性修改数据
         * XmlHelper.XmlUpdateValue(path, "/books", "book","author","Value")
        public static void XmlUpdateValue(string path, string node, string attribute, string value)
                XmlElement xmlElement = (XmlElement)xmlNode;
                if (attribute.Equals(""))
                    xmlElement.InnerText = value;
                    xmlElement.SetAttribute(attribute, value);
        #region Xml删除数据
        /// 删除数据
         * XmlHelper.XmlDelete(path, "/books", "book")
        public static void XmlDelete(string path, string node, string attribute)
                XmlNode xn = doc.SelectSingleNode(node);
                XmlElement xe = (XmlElement)xn;
                    xn.ParentNode.RemoveChild(xn);
                    xe.RemoveAttribute(attribute);
    }

到此这篇关于C#XmlHelper帮助类操作Xml文档的通用方法汇总的文章就介绍到这了,更多相关C#XmlHelper帮助类内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/Can-daydayup/p/16058817.html

延伸 · 阅读

精彩推荐
  • C#C#动态创建button的方法

    C#动态创建button的方法

    这篇文章主要介绍了C#动态创建button的方法,涉及C#按钮属性动态设置的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    我心依旧10692021-10-22
  • C#详解c#与python的交互方式

    详解c#与python的交互方式

    这篇文章主要介绍了详解c#与python的交互方式,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下...

    chaney19925012022-11-14
  • C#C#窗体传值代码方法

    C#窗体传值代码方法

    在本篇文章里小编给大家整理的是关于C#窗体传值代码内容,需要的朋友们可以跟着学习参考下。...

    .NET开发菜鸟3802022-08-27
  • C#C#实现简单的计算器功能完整实例

    C#实现简单的计算器功能完整实例

    这篇文章主要介绍了C#实现简单的计算器功能,结合完整实例形式分析了C#实现常见的数学运算、进制转换等相关操作技巧与界面布局方法,需要的朋友可以参...

    5t4rk11172022-01-20
  • C#C#泛型详解及关键字作用

    C#泛型详解及关键字作用

    这篇文章主要来讲讲c#中的泛型,因为泛型在c#中有很重要的位置,对于写出高可读性,高性能的代码有着关键的作用,大家都知道泛型公共语言运行库是非...

    黄厚镇11402022-11-29
  • C#C# 基于NAudio实现对Wav音频文件剪切(限PCM格式)

    C# 基于NAudio实现对Wav音频文件剪切(限PCM格式)

    本文主要介绍了C#基于NAudio工具对Wav音频文件进行剪切,可以将一个音频文件剪切成多个音频文件(限PCM格式),感兴趣的小伙伴可以学习一下...

    QianTLL10162022-12-12
  • C#详解C#中的接口属性以及属性访问器的访问限制

    详解C#中的接口属性以及属性访问器的访问限制

    这篇文章主要介绍了详解C#中的接口属性以及属性访问器的访问限制,文中讲到了使用访问器实现接口时添加访问修饰符的问题,需要的朋友可以参考下...

    C#教程网12082021-11-09
  • C#C#(.Net)将非托管dll嵌入exe中的实现

    C#(.Net)将非托管dll嵌入exe中的实现

    本文主要介绍了C#(.Net)将非托管dll嵌入exe中的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Dear_Xuan6492022-12-14