日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# XmlHelper

發布時間:2023/12/18 C# 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# XmlHelper 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、需求

二、XmlHelper

三、使用方法

1.創建XML文件

2.插入節點

1)插入節點和屬性值

2)插入沒有屬性值的節點

3.讀取節點

1)讀取節點的屬性值

2)讀取指定的節點值

4.更新節點

1)更新沒有屬性的節點值

2)更新節點值

5.刪除節點

結束


一、需求

對于小量數據在本地存儲,可能會用到 xml 文件,下面的 xmlhelper.cs 代碼出處好像是微軟的,不太清楚,百度搜的很多帖子只是貼出了 xmlhelper 代碼,千篇一律,全是貼了代碼就什么都沒有了,在此我將 xmlhelper 常用的 增、刪、改、查 做一個教程。

二、XmlHelper

using System; using System.Collections; using System.Data; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization;namespace Utils {public class XmlHelper{public XmlHelper(){}public enum XmlType{File,String};/// <summary>/// 創建XML文檔/// </summary>/// <param name="name">根節點名稱</param>/// <param name="type">根節點的一個屬性值</param>/// <returns></returns>/// .net中調用方法:寫入文件中,則:/// document = XmlOperate.CreateXmlDocument("sex", "sexy");/// document.Save("c:/bookstore.xml"); public static XmlDocument CreateXmlDocument(string name, string type){XmlDocument doc = null;XmlElement rootEle = null;try{doc = new XmlDocument();doc.LoadXml("<" + name + "/>");rootEle = doc.DocumentElement;rootEle.SetAttribute("type", type);}catch (Exception er){throw er;}return doc;}/// <summary>/// 讀取數據/// </summary>/// <param name="path">路徑</param>/// <param name="node">節點</param>/// <param name="attribute">屬性名,非空時返回該屬性值,否則返回串聯值</param>/// <returns>string</returns>/*************************************************** 使用示列:* XmlHelper.Read(path, "/Node", "")* XmlHelper.Read(path, "/Node/Element[@Attribute='Name']", "Attribute")************************************************/public static string Read(string path, string node, string attribute){string value = "";try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xn = doc.SelectSingleNode(node);value = (attribute.Equals("") ? xn.InnerText : xn.Attributes[attribute].Value);}catch { }return value;}/// <summary>/// 插入數據/// </summary>/// <param name="path">路徑</param>/// <param name="node">節點</param>/// <param name="element">元素名,非空時插入新元素,否則在該元素中插入屬性</param>/// <param name="attribute">屬性名,非空時插入該元素屬性值,否則插入元素值</param>/// <param name="value">值</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.Insert(path, "/Node", "Element", "", "Value")* XmlHelper.Insert(path, "/Node", "Element", "Attribute", "Value")* XmlHelper.Insert(path, "/Node", "", "Attribute", "Value")************************************************/public static void Insert(string path, string node, string element, string attribute, string value){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xn = doc.SelectSingleNode(node);if (element.Equals("")){if (!attribute.Equals("")){XmlElement xe = (XmlElement)xn;xe.SetAttribute(attribute, value);}}else{XmlElement xe = doc.CreateElement(element);if (attribute.Equals(""))xe.InnerText = value;elsexe.SetAttribute(attribute, value);xn.AppendChild(xe);}doc.Save(path);}catch { }}/// <summary>/// 修改數據/// </summary>/// <param name="path">路徑</param>/// <param name="node">節點</param>/// <param name="attribute">屬性名,非空時修改該節點屬性值,否則修改節點值</param>/// <param name="value">值</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.Update(path, "/Node", "", "Value")* XmlHelper.Update(path, "/Node", "Attribute", "Value")************************************************/public static void Update(string path, string node, string attribute, string value){try{XmlDocument doc = new XmlDocument();doc.Load(path);XmlNode xn = doc.SelectSingleNode(node);XmlElement xe = (XmlElement)xn;if (attribute.Equals(""))xe.InnerText = value;elsexe.SetAttribute(attribute, value);doc.Save(path);}catch { }}/// <summary>/// 刪除數據/// </summary>/// <param name="path">路徑</param>/// <param name="node">節點</param>/// <param name="attribute">屬性名,非空時刪除該節點屬性值,否則刪除節點值</param>/// <param name="value">值</param>/// <returns></returns>/*************************************************** 使用示列:* XmlHelper.Delete(path, "/Node", "")* XmlHelper.Delete(path, "/Node", "Attribute")************************************************/public static void Delete(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 { }}#region 讀取XML資源到DataSet中/// <summary>/// 讀取XML資源到DataSet中/// </summary>/// <param name="source">XML資源,文件為路徑,否則為XML字符串</param>/// <param name="xmlType">XML資源類型</param>/// <returns>DataSet</returns>public static DataSet GetDataSet(string source, XmlType xmlType){DataSet ds = new DataSet();if (xmlType == XmlType.File){ds.ReadXml(source);}else{XmlDocument xd = new XmlDocument();xd.LoadXml(source);XmlNodeReader xnr = new XmlNodeReader(xd);ds.ReadXml(xnr);}return ds;}#endregion#region 操作xml文件中指定節點的數據/// <summary>/// 獲得xml文件中指定節點的節點數據/// </summary>/// <param name="TableName"></param>/// <returns></returns>public static string GetNodeInfoByNodeName(string path, string nodeName){string XmlString = "";XmlDocument xml = new XmlDocument();xml.Load(path);System.Xml.XmlElement root = xml.DocumentElement;System.Xml.XmlNode node = root.SelectSingleNode("//" + nodeName);if (node != null){XmlString = node.InnerText;}return XmlString;}#endregion#region 獲取一個字符串xml文檔中的ds/// <summary>/// 獲取一個字符串xml文檔中的ds/// </summary>/// <param name="xml_string">含有xml信息的字符串</param>public static void get_XmlValue_ds(string xml_string, ref DataSet ds){System.Xml.XmlDocument xd = new XmlDocument();xd.LoadXml(xml_string);XmlNodeReader xnr = new XmlNodeReader(xd);ds.ReadXml(xnr);xnr.Close();int a = ds.Tables.Count;}#endregion#region 讀取XML資源到DataTable中/// <summary>/// 讀取XML資源到DataTable中/// </summary>/// <param name="source">XML資源,文件為路徑,否則為XML字符串</param>/// <param name="xmlType">XML資源類型:文件,字符串</param>/// <param name="tableName">表名稱</param>/// <returns>DataTable</returns>public static DataTable GetTable(string source, XmlType xmlType, string tableName){DataSet ds = new DataSet();if (xmlType == XmlType.File){ds.ReadXml(source);}else{XmlDocument xd = new XmlDocument();xd.LoadXml(source);XmlNodeReader xnr = new XmlNodeReader(xd);ds.ReadXml(xnr);}return ds.Tables[tableName];}#endregion#region 讀取XML資源中指定的DataTable的指定行指定列的值/// <summary>/// 讀取XML資源中指定的DataTable的指定行指定列的值/// </summary>/// <param name="source">XML資源</param>/// <param name="xmlType">XML資源類型:文件,字符串</param>/// <param name="tableName">表名</param>/// <param name="rowIndex">行號</param>/// <param name="colName">列名</param>/// <returns>值,不存在時返回Null</returns>public static object GetTableCell(string source, XmlType xmlType, string tableName, int rowIndex, string colName){DataSet ds = new DataSet();if (xmlType == XmlType.File){ds.ReadXml(source);}else{XmlDocument xd = new XmlDocument();xd.LoadXml(source);XmlNodeReader xnr = new XmlNodeReader(xd);ds.ReadXml(xnr);}return ds.Tables[tableName].Rows[rowIndex][colName];}#endregion#region 讀取XML資源中指定的DataTable的指定行指定列的值/// <summary>/// 讀取XML資源中指定的DataTable的指定行指定列的值/// </summary>/// <param name="source">XML資源</param>/// <param name="xmlType">XML資源類型:文件,字符串</param>/// <param name="tableName">表名</param>/// <param name="rowIndex">行號</param>/// <param name="colIndex">列號</param>/// <returns>值,不存在時返回Null</returns>public static object GetTableCell(string source, XmlType xmlType, string tableName, int rowIndex, int colIndex){DataSet ds = new DataSet();if (xmlType == XmlType.File){ds.ReadXml(source);}else{XmlDocument xd = new XmlDocument();xd.LoadXml(source);XmlNodeReader xnr = new XmlNodeReader(xd);ds.ReadXml(xnr);}return ds.Tables[tableName].Rows[rowIndex][colIndex];}#endregion#region 將DataTable寫入XML文件中/// <summary>/// 將DataTable寫入XML文件中/// </summary>/// <param name="dt">含有數據的DataTable</param>/// <param name="filePath">文件路徑</param>public static void SaveTableToFile(DataTable dt, string filePath){DataSet ds = new DataSet("Config");ds.Tables.Add(dt.Copy());ds.WriteXml(filePath);}#endregion#region 將DataTable以指定的根結點名稱寫入文件/// <summary>/// 將DataTable以指定的根結點名稱寫入文件/// </summary>/// <param name="dt">含有數據的DataTable</param>/// <param name="rootName">根結點名稱</param>/// <param name="filePath">文件路徑</param>public static void SaveTableToFile(DataTable dt, string rootName, string filePath){DataSet ds = new DataSet(rootName);ds.Tables.Add(dt.Copy());ds.WriteXml(filePath);}#endregion#region 使用DataSet方式更新XML文件節點/// <summary>/// 使用DataSet方式更新XML文件節點/// </summary>/// <param name="filePath">XML文件路徑</param>/// <param name="tableName">表名稱</param>/// <param name="rowIndex">行號</param>/// <param name="colName">列名</param>/// <param name="content">更新值</param>/// <returns>更新是否成功</returns>public static bool UpdateTableCell(string filePath, string tableName, int rowIndex, string colName, string content){bool flag = false;DataSet ds = new DataSet();ds.ReadXml(filePath);DataTable dt = ds.Tables[tableName];if (dt.Rows[rowIndex][colName] != null){dt.Rows[rowIndex][colName] = content;ds.WriteXml(filePath);flag = true;}else{flag = false;}return flag;}#endregion#region 使用DataSet方式更新XML文件節點/// <summary>/// 使用DataSet方式更新XML文件節點/// </summary>/// <param name="filePath">XML文件路徑</param>/// <param name="tableName">表名稱</param>/// <param name="rowIndex">行號</param>/// <param name="colIndex">列號</param>/// <param name="content">更新值</param>/// <returns>更新是否成功</returns>public static bool UpdateTableCell(string filePath, string tableName, int rowIndex, int colIndex, string content){bool flag = false;DataSet ds = new DataSet();ds.ReadXml(filePath);DataTable dt = ds.Tables[tableName];if (dt.Rows[rowIndex][colIndex] != null){dt.Rows[rowIndex][colIndex] = content;ds.WriteXml(filePath);flag = true;}else{flag = false;}return flag;}#endregion#region 讀取XML資源中的指定節點內容/// <summary>/// 讀取XML資源中的指定節點內容/// </summary>/// <param name="source">XML資源</param>/// <param name="xmlType">XML資源類型:文件,字符串</param>/// <param name="nodeName">節點名稱</param>/// <returns>節點內容</returns>public static object GetNodeValue(string source, XmlType xmlType, string nodeName){XmlDocument xd = new XmlDocument();if (xmlType == XmlType.File){xd.Load(source);}else{xd.LoadXml(source);}XmlElement xe = xd.DocumentElement;XmlNode xn = xe.SelectSingleNode("//" + nodeName);if (xn != null){return xn.InnerText;}else{return null;}}/// <summary>/// 讀取XML資源中的指定節點內容/// </summary>/// <param name="source">XML資源</param>/// <param name="nodeName">節點名稱</param>/// <returns>節點內容</returns>public static object GetNodeValue(string source, string nodeName){if (source == null || nodeName == null || source == "" || nodeName == "" || source.Length < nodeName.Length * 2){return null;}else{int start = source.IndexOf("<" + nodeName + ">") + nodeName.Length + 2;int end = source.IndexOf("</" + nodeName + ">");if (start == -1 || end == -1){return null;}else if (start >= end){return null;}else{return source.Substring(start, end - start);}}}#endregion#region 更新XML文件中的指定節點內容/// <summary>/// 更新XML文件中的指定節點內容/// </summary>/// <param name="filePath">文件路徑</param>/// <param name="nodeName">節點名稱</param>/// <param name="nodeValue">更新內容</param>/// <returns>更新是否成功</returns>public static bool UpdateNode(string filePath, string nodeName, string nodeValue){bool flag = false;XmlDocument xd = new XmlDocument();xd.Load(filePath);XmlElement xe = xd.DocumentElement;XmlNode xn = xe.SelectSingleNode("//" + nodeName);if (xn != null){xn.InnerText = nodeValue;flag = true;}else{flag = false;}return flag;}#endregion#region 讀取xml文件,并將文件序列化為類/// <summary>/// 讀取xml文件,并將文件序列化為類/// </summary>/// <typeparam name="T"></typeparam>/// <param name="path"></param>/// <returns></returns>public static T ReadXML<T>(string path){XmlSerializer reader = new XmlSerializer(typeof(T));//TODOStreamReader file = new StreamReader(@path);return (T)reader.Deserialize(file);}#endregion#region 將對象寫入XML文件/// <summary>/// 將對象寫入XML文件/// </summary>/// <typeparam name="T">C#對象名</typeparam>/// <param name="item">對象實例</param>/// <param name="path">路徑</param>/// <param name="jjdbh">標號</param>/// <param name="ends">結束符號(整個xml的路徑類似如下:C:\xmltest\201111send.xml,其中path=C:\xmltest,jjdbh=201111,ends=send)</param>/// <returns></returns>public static string WriteXML<T>(T item, string path, string jjdbh, string ends){if (string.IsNullOrEmpty(ends)){//默認為發送ends = "send";}int i = 0;//控制寫入文件的次數,XmlSerializer serializer = new XmlSerializer(item.GetType());object[] obj = new object[] { path, "\\", jjdbh, ends, ".xml" };string xmlPath = String.Concat(obj);while (true){try{//用filestream方式創建文件不會出現“文件正在占用中,用File.create”則不行FileStream fs;fs = File.Create(xmlPath);fs.Close();TextWriter writer = new StreamWriter(xmlPath, false, Encoding.UTF8);XmlSerializerNamespaces xml = new XmlSerializerNamespaces();xml.Add(string.Empty, string.Empty);serializer.Serialize(writer, item, xml);writer.Flush();writer.Close();break;}catch (Exception){if (i < 5){i++;continue;}else{break;}}}return SerializeToXmlStr<T>(item, true);}#endregion#region 靜態擴展/// <summary>/// 靜態擴展/// </summary>/// <typeparam name="T">需要序列化的對象類型,必須聲明[Serializable]特征</typeparam>/// <param name="obj">需要序列化的對象</param>/// <param name="omitXmlDeclaration">true:省略XML聲明;否則為false.默認false,即編寫 XML 聲明。</param>/// <returns></returns>public static string SerializeToXmlStr<T>(T obj, bool omitXmlDeclaration){return XmlSerialize<T>(obj, omitXmlDeclaration);} #endregion#region XML序列化反序列化相關的靜態方法/// <summary>/// 使用XmlSerializer序列化對象/// </summary>/// <typeparam name="T">需要序列化的對象類型,必須聲明[Serializable]特征</typeparam>/// <param name="obj">需要序列化的對象</param>/// <param name="omitXmlDeclaration">true:省略XML聲明;否則為false.默認false,即編寫 XML 聲明。</param>/// <returns>序列化后的字符串</returns>public static string XmlSerialize<T>(T obj, bool omitXmlDeclaration){/* This property only applies to XmlWriter instances that output text content to a stream; otherwise, this setting is ignored.可能很多朋友遇見過 不能轉換成Xml不能反序列化成為UTF8XML聲明的情況,就是這個原因。*/XmlWriterSettings xmlSettings = new XmlWriterSettings();xmlSettings.OmitXmlDeclaration = omitXmlDeclaration;xmlSettings.Encoding = new System.Text.UTF8Encoding(false);MemoryStream stream = new MemoryStream();//var writer = new StringWriter();//這里如果直接寫成:Encoding = Encoding.UTF8 會在生成的xml中加入BOM(Byte-order Mark) 信息(Unicode 字節順序標記) , //所以new System.Text.UTF8Encoding(false)是最佳方式,省得再做替換的麻煩XmlWriter xmlwriter = XmlWriter.Create(stream/*writer*/, xmlSettings); XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();xmlns.Add(String.Empty, String.Empty); //在XML序列化時去除默認命名空間xmlns:xsd和xmlns:xsiXmlSerializer ser = new XmlSerializer(typeof(T));ser.Serialize(xmlwriter, obj, xmlns);return Encoding.UTF8.GetString(stream.ToArray());//writer.ToString();}/// <summary>/// 使用XmlSerializer序列化對象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="path">文件路徑</param>/// <param name="obj">需要序列化的對象</param>/// <param name="omitXmlDeclaration">true:省略XML聲明;否則為false.默認false,即編寫 XML 聲明。</param>/// <param name="removeDefaultNamespace">是否移除默認名稱空間(如果對象定義時指定了:XmlRoot(Namespace = "http://www.xxx.com/xsd")則需要傳false值進來)</param>/// <returns>序列化后的字符串</returns>public static void XmlSerialize<T>(string path, T obj, bool omitXmlDeclaration, bool removeDefaultNamespace){XmlWriterSettings xmlSetings = new XmlWriterSettings();xmlSetings.OmitXmlDeclaration = omitXmlDeclaration;using (XmlWriter xmlwriter = XmlWriter.Create(path, xmlSetings)){XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();if (removeDefaultNamespace)xmlns.Add(String.Empty, String.Empty); //在XML序列化時去除默認命名空間xmlns:xsd和xmlns:xsiXmlSerializer ser = new XmlSerializer(typeof(T));ser.Serialize(xmlwriter, obj, xmlns);}}private static byte[] ShareReadFile(string filePath){byte[] bytes;//避免"正由另一進程使用,因此該進程無法訪問此文件"造成異常 共享鎖 flieShare必須為ReadWrite,//但是如果文件不存在的話,還是會出現異常,所以這里不能吃掉任何異常,但是需要考慮到這些問題 using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)){bytes = new byte[fs.Length];int numBytesToRead = (int)fs.Length;int numBytesRead = 0;while (numBytesToRead > 0){int n = fs.Read(bytes, numBytesRead, numBytesToRead);if (n == 0)break;numBytesRead += n;numBytesToRead -= n;}}return bytes;}/// <summary>/// 從文件讀取并反序列化為對象 (解決: 多線程或多進程下讀寫并發問題)/// </summary>/// <typeparam name="T">返回的對象類型</typeparam>/// <param name="path">文件地址</param>/// <returns></returns>public static T XmlFileDeserialize<T>(string path){byte[] bytes = ShareReadFile(path);//當文件正在被寫入數據時,可能讀出為0if (bytes.Length < 1){//5次機會for (int i = 0; i < 5; i++){// 采用這樣詭異的做法避免獨占文件和文件正在被寫入時讀出來的數據為0字節的問題。bytes = ShareReadFile(path);if (bytes.Length > 0) break;//悲觀情況下總共最多消耗1/4秒,讀取文件System.Threading.Thread.Sleep(50);}}XmlDocument doc = new XmlDocument();doc.Load(new MemoryStream(bytes));if (doc.DocumentElement != null)return (T)new XmlSerializer(typeof(T)).Deserialize(new XmlNodeReader(doc.DocumentElement));return default(T);//XmlReaderSettings xmlReaderSettings = new XmlReaderSettings();//xmlReaderSettings.CloseInput = true;//using (XmlReader xmlReader = XmlReader.Create(path, xmlReaderSettings))//{// T obj = (T)new XmlSerializer(typeof(T)).Deserialize(xmlReader);// return obj;//}}/// <summary>/// 使用XmlSerializer反序列化對象/// </summary>/// <param name="xmlOfObject">需要反序列化的xml字符串</param>/// <returns>反序列化后的對象</returns>public static T XmlDeserialize<T>(string xmlOfObject) where T : class{XmlReader xmlReader = XmlReader.Create(new StringReader(xmlOfObject), new XmlReaderSettings());return (T)new XmlSerializer(typeof(T)).Deserialize(xmlReader);}#endregion}}

三、使用方法

新建一個項目,winfrom和控制臺都可以,在寫代碼之前,使用一個默認路徑,用來讀寫xml文件,放在項目的生成目錄,在項目中寫一個全局變量,如下:

private static string path = Application.StartupPath + "\\MyXML.xml";

1.創建XML文件

C#代碼:

//創建XML文件 XmlDocument xmlDocument = XmlHelper.CreateXmlDocument("Root", "root"); xmlDocument.Save(path);

運行后,生成的xml文件:

XML:

<Root type="root" />

這里只有一個Root節點,沒其他內容

2.插入節點

操作前的 xml 內容:

<Root type="root" />

1)插入節點和屬性值

這里需要注意的是,第二個參數 ”/Root“? 這里不可以加入不存在的節點,否則會報錯,比如:"/Root/Dog" ,意思是要插入到Root /?Dog 節點下,而此時并沒有創建Dog節點。下面是參數字符串的解釋:

"path" -------------xml文件路徑
"/Root" -----------要插入到xml文件中的那個節點中
"Dog" -------------元素名
"Attribute" -------屬性名,不用就傳 ""
"狗" ---------------值,如果屬性名不為空,這里就是屬性值,否則就是節點值

C#代碼:

XmlHelper.Insert(path, "/Root", "Dog", "Attribute", "狗");

運行后的XML:

<Root type="root"><Dog Attribute="狗" /> </Root>

2)插入沒有屬性值的節點

C#代碼:

XmlHelper.Insert(path, "/Root/Dog", "Husky", "Attribute", "哈士奇"); XmlHelper.Insert(path, "/Root/Dog/Husky", "Name", "", "傻狗二哈"); XmlHelper.Insert(path, "/Root/Dog/Husky", "Name", "", "旺財");

運行后的XML:

<Root type="root"><Dog Attribute="狗"><Husky Attribute="哈士奇"><Name>傻狗二哈</Name><Name>旺財</Name></Husky></Dog> </Root>

第一條插入的是屬性,哈士奇是屬性的值。

第二條,第三條插入的節點值。

3.讀取節點

操作前的 xml 內容:

<Root type="root"><Dog Attribute="狗"><Husky Attribute="哈士奇"><Name>傻狗二哈</Name><Name>旺財</Name></Husky></Dog> </Root>

1)讀取節點的屬性值

C#代碼:

string node = XmlHelper.Read(path, "/Root/Dog/Husky[@Attribute='哈士奇']", ""); Console.WriteLine("節點名:" + node);

執行結果:

讀取了哈士奇節點下面所有的節點值

2)讀取指定的節點值

C#代碼:

string node = XmlHelper.Read(path, "/Root/Dog/Husky/Name", ""); Console.WriteLine("節點名:" + node);

執行結果:

只讀取了哈士奇節點下的一個節點

4.更新節點

操作前的 xml 內容:

<Root type="root"><Dog Attribute="狗"><Husky Attribute="哈士奇"><Name>傻狗二哈</Name><Name>旺財</Name></Husky></Dog> </Root>

1)更新沒有屬性的節點值

C#代碼:

XmlHelper.Update(path, "/Root/Dog/Husky/Name", "", "傻狗");

運行后的XML:

<Root type="root"><Dog Attribute="狗"><Husky Attribute="哈士奇"><Name>傻狗</Name><Name>旺財</Name></Husky></Dog> </Root>

將傻狗二哈改了傻狗

2)更新節點值

C#代碼:

XmlHelper.Update(path, "/Root/Dog/Husky", "Attribute", "ha-shi-qi");

運行后的XML:

<Root type="root"><Dog Attribute="狗"><Husky Attribute="ha-shi-qi"><Name>傻狗</Name><Name>旺財</Name></Husky></Dog> </Root>

5.刪除節點

操作前的 xml 內容:

<Root type="root"><Dog Attribute="狗"><Husky Attribute="ha-shi-qi"><Name>傻狗</Name><Name>旺財</Name></Husky></Dog> </Root>

需求:刪除 Husky 節點下的 Name 節點

C#代碼:

XmlHelper.Delete(path, "/Root/Dog/Husky/Name", "");

運行后的XML:

<Root type="root"><Dog Attribute="狗"><Husky Attribute="ha-shi-qi"><Name>旺財</Name></Husky></Dog> </Root>

可以看到,這里的Name節點原本有兩個,刪除的時候,只刪除了第一行的節點。

不如我們刪除多個節點試試:

C#代碼:

XmlHelper.Delete(path, "/Root/Dog", "");

運行后的XML:

<Root type="root"> </Root>

子節點被一并刪除了

結束

如果這個帖子對你有用,歡迎關注 + 點贊 + 留言,謝謝

end

總結

以上是生活随笔為你收集整理的C# XmlHelper的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。