C#:XML操作總結2 包括讀取、插入、修改、刪除
1、讀取節點中某一個屬性的值
/// <summary> /// 讀取節點中某一個屬性的值。如果attribute為空白,則返回整個節點的InnerText,否則返回具體attribute的值 /// </summary> /// <param name="path">xml檔案路徑</param> /// <param name="node">節點</param> /// <param name="attribute">節點中的屬性</param> /// <returns>如果attribute為空白,則返回整個節點的InnerText,否則返回具體attribute的值</returns> /// 使用執行個體: XMLHelper.Read(path, "PersonF/person[@Name='Person2']", ""); /// XMLHelper.Read(path, "PersonF/person[@Name='Person2']", "Name"); 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(Exception e) { Console.WriteLine(e.Message); } return value; }
2、 向節點中增加節點元素,屬性
/// <summary> /// 向節點中增加節點元素,屬性 /// </summary> /// <param name="path">路徑</param> /// <param name="node">要操作的節點</param> /// <param name="element">要增加的節點元素,可空可不空。非空時插入新的元素,否則插入該元素的屬性</param> /// <param name="attribute">要增加的節點屬性,可空可不空。非空時插入元素值,否則插入元素值</param> /// <param name="value">要增加的節點值</param> /// 使用執行個體:XMLHelper.Insert(path, "PersonF/person[@Name='Person2']","Num", "ID", "88"); /// XMLHelper.Insert(path, "PersonF/person[@Name='Person2']","Num", "", "88"); /// XMLHelper.Insert(path, "PersonF/person[@Name='Person2']", "", "ID", "88"); 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); //如果element,則增加該屬性 if (string.IsNullOrEmpty(element)) { //如果attribute不為空白,增加該屬性 if (!string.IsNullOrEmpty(attribute)) { XmlElement xe = (XmlElement)xn; // <person Name="Person2" ID="88"> XMLHelper.Insert(path, "PersonF/person[@Name='Person2']","Num", "ID", "88"); xe.SetAttribute(attribute, value); } } else //如果element不為空白,則preson下增加節點 { XmlElement xe = doc.CreateElement(element); if (string.IsNullOrEmpty(attribute)) // <person><Num>88</Num></person> XMLHelper.Insert(path, "PersonF/person[@Name='Person2']","Num", "", "88"); xe.InnerText = value; else // <person> <Num ID="88" /></person> XMLHelper.Insert(path, "PersonF/person[@Name='Person2']", "", "ID", "88"); xe.SetAttribute(attribute, value); xn.AppendChild(xe); } doc.Save(path); } catch (Exception e) { Console.WriteLine(e.Message); } }
3、修改節點值
/// <summary> /// 修改節點值 /// </summary> /// <param name="path">路徑</param> /// <param name="node">要修改的節點</param> /// <param name="attribute">屬性名稱,非空時修改節點的屬性值,否則修改節點值</param> /// <param name="value">屬性值</param> /// 執行個體 XMLHelper.Update(path, "PersonF/person[@Name='Person3']/ID", "", "888"); /// XMLHelper.Update(path, "PersonF/person[@Name='Person3']/ID", "Num", "999"); 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 (string.IsNullOrEmpty(attribute)) xe.InnerText = value;//原<ID>2</ID> 改變:<ID>888</ID> XMLHelper.Update(path, "PersonF/person[@Name='Person3']/ID", "", "888"); else xe.SetAttribute(attribute, value); //原<ID Num="3">888</ID> 改變<ID Num="999">888</ID> XMLHelper.Update(path, "PersonF/person[@Name='Person3']/ID", "Num", "999"); doc.Save(path); } catch (Exception e) { Console.WriteLine(e.Message); } }
4、刪除資料
/// <summary> /// 刪除資料 /// </summary> /// <param name="path">路徑</param> /// <param name="node">要刪除的節點</param> /// <param name="attribute">屬性,為空白則刪除整個節點,不為空白則刪除節點中的屬性</param> /// 執行個體:XMLHelper.Delete(path, "PersonF/person[@Name='Person3']/ID", ""); /// XMLHelper.Delete(path, "PersonF/person[@Name='Person3']/ID", "Num"); 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 (string.IsNullOrEmpty(attribute)) xn.ParentNode.RemoveChild(xn);// <ID Num="999">888</ID>的整個節點將被移除 XMLHelper.Delete(path, "PersonF/person[@Name='Person3']/ID", ""); else xe.RemoveAttribute(attribute);//<ID Num="999">888</ID> 變為<ID>888</ID> XMLHelper.Delete(path, "PersonF/person[@Name='Person3']/ID", "Num"); doc.Save(path); } catch (Exception e) { Console.WriteLine(e.Message); } }
5、調用方法
public static void XMLMTest() { string path = "http://www.cnblogs.com/../Person.xml"; XMLHelper.Read(path, "PersonF/person[@Name='Person2']", "Name"); XMLHelper.Insert(path, "PersonF/person[@Name='Person2']", "Num", "ID", "88"); XMLHelper.Insert(path, "PersonF/person[@Name='Person2']", "Num", "", "88"); XMLHelper.Insert(path, "PersonF/person[@Name='Person2']", "", "ID", "88"); XMLHelper.Update(path, "PersonF/person[@Name='Person3']", "Num", "888"); XMLHelper.Update(path, "PersonF/person[@Name='Person3']/ID", "Num", "999"); XMLHelper.Update(path, "PersonF/person[@Name='Person3']/ID", "", "888"); XMLHelper.Delete(path, "PersonF/person[@Name='Person3']/ID", "Num"); XMLHelper.Delete(path, "PersonF/person[@Name='Person3']/ID", ""); }
6、XML檔案
<?xml version="1.0" encoding="utf-8"?><PersonF xmlns="" Name="work hard work smart!"> <person Name="Person1"> <ID>1</ID> <Name>XiaoA</Name> <Age>59</Age> </person> <person Name="Person2" ID="88"> <ID>2</ID> <Name>XiaoB</Name> <Age>29</Age> <Num ID="88" /> <Num>88</Num> </person> <person Name="Person3"> <ID Num="999">888</ID> <Name>XiaoC</Name> <Age>103</Age> </person> <person Name="Person4"> <ID>4</ID> <Name>XiaoD</Name> <Age>59</Age> </person> <person Name="Person5"> <Name>work hard work smart!</Name> <ID>32</ID> </person> <person Name="Person5"> <Name>work hard work smart!</Name> <ID>32</ID> </person></PersonF>
下文是對C#對XML的具體操作總結1
C# XML操作總結2 包括讀取、插入、修改、刪除
如何完成.Net下XML文檔的讀寫操作
C#操作xml SelectNodes,SelectSingleNode總是返回NULL 與 xPath 介紹
C#中用SelectSingleNode方法解析帶有多個命名空間的XML檔案