1、簡單介紹
?using System.Xml;
//初始化一個xml實例
XmlDocument xml=new XmlDocument();
?
//導入指定xml文件
?xml.Load(path);
?xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));
?
//指定一個節點
XmlNode root=xml.SelectSingleNode("/root");
?
//獲取節點下所有直接子節點
XmlNodeList childlist=root.ChildNodes;
?
//判斷該節點下是否有子節點
root.HasChildNodes;
?
//獲取同名同級節點集合
XmlNodeList nodelist=xml.SelectNodes("/Root/News");
?
?//生成一個新節點
?XmlElement node=xml.CreateElement("News");
?
?//將節點加到指定節點下,作為其子節點
?root.AppendChild(node);
?
//將節點加到指定節點下某個子節點前
root.InsertBefore(node,root.ChildeNodes[i]);
?
?//為指定節點的新建屬性并賦值
?node.SetAttribute("id","11111");
?
//為指定節點添加子節點
root.AppendChild(node);
?
//獲取指定節點的指定屬性值
string id=node.Attributes["id"].Value;
?
//獲取指定節點中的文本
string content=node.InnerText;
?
//保存XML文件 string path=Server.MapPath("~/file/bookstore.xml");
?
xml.Save(path); //or use :xml.Save(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));
?
二、具體實例
在C#.net中如何操作XML
需要添加的命名空間:
using System.Xml;
1、創建到服務器同名目錄下的xml文件:
方法一:
?
XmlDocument?xmldoc;??????????????XmlNode?xmlnode;??????????????XmlElement?xmlelem;??????????????xmldoc?=?new?XmlDocument();????????????????????????????XmlDeclaration?xmldecl;??????????????xmldecl?=?xmldoc.CreateXmlDeclaration("1.0",?"gb2312",?null);??????????????xmldoc.AppendChild(xmldecl);????????????????????????????xmlelem?=?xmldoc.CreateElement("",?"Employees",?"");??????????????xmldoc.AppendChild(xmlelem);????????????????????????????for?(int?i?=?1;?i?<?3;?i++)??????????????{??????????????????XmlNode?root?=?xmldoc.SelectSingleNode("Employees");??????????????????XmlElement?xe1?=?xmldoc.CreateElement("Node");??????????????????xe1.SetAttribute("genre",?"李贊紅");??????????????????xe1.SetAttribute("ISBN",?"2-3631-4");??????????????????XmlElement?xesub1?=?xmldoc.CreateElement("title");??????????????????xesub1.InnerText?=?"CS從入門到精通";??????????????????xe1.AppendChild(xesub1);??????????????????XmlElement?xesub2?=?xmldoc.CreateElement("author");??????????????????xesub2.InnerText?=?"候捷";??????????????????xe1.AppendChild(xesub2);??????????????????XmlElement?xesub3?=?xmldoc.CreateElement("price");??????????????????xesub3.InnerText?=?"58.3";??????????????????xe1.AppendChild(xesub3);??????????????????root.AppendChild(xe1);??????????????}????????????????????????????xmldoc.Save("data.xml");???方法二:
view plaincopy to clipboardprint?
XmlTextWriter?xmlWriter;??????????????string?strFilename?=?"data1.xml";??????????????xmlWriter?=?new?XmlTextWriter(strFilename,?Encoding.Default);??????????????xmlWriter.Formatting?=?Formatting.Indented;??????????????xmlWriter.WriteStartDocument();??????????????xmlWriter.WriteStartElement("Employees");??????????????xmlWriter.WriteStartElement("Node");??????????????xmlWriter.WriteAttributeString("genre",?"李贊紅");??????????????xmlWriter.WriteAttributeString("ISBN",?"2-3631-4");??????????????xmlWriter.WriteStartElement("title");??????????????xmlWriter.WriteString("CS 從入門到精通");??????????????xmlWriter.WriteEndElement();??????????????xmlWriter.WriteStartElement("author");??????????????xmlWriter.WriteString("候捷");??????????????xmlWriter.WriteEndElement();??????????????xmlWriter.WriteStartElement("price");??????????????xmlWriter.WriteString("58.3");??????????????xmlWriter.WriteEndElement();??????????????xmlWriter.WriteEndElement();??????????????xmlWriter.Close();?? XmlTextWriter xmlWriter; string strFilename = "data1.xml"; xmlWriter = new XmlTextWriter(strFilename, Encoding.Default);//創建一個xml文檔 xmlWriter.Formatting = Formatting.Indented; xmlWriter.WriteStartDocument(); xmlWriter.WriteStartElement("Employees"); xmlWriter.WriteStartElement("Node"); xmlWriter.WriteAttributeString("genre", "李贊紅"); xmlWriter.WriteAttributeString("ISBN", "2-3631-4"); xmlWriter.WriteStartElement("title"); xmlWriter.WriteString("CS從入門到精通"); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("author"); xmlWriter.WriteString("候捷"); xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("price"); xmlWriter.WriteString("58.3"); xmlWriter.WriteEndElement(); xmlWriter.WriteEndElement(); xmlWriter.Close();
?
2、添加一個結點
view plaincopy to clipboardprint?
XmlDocument?xmlDoc?=?new?XmlDocument();?????????????xmlDoc.Load("data.xml");?????????????XmlNode?root?=?xmlDoc.SelectSingleNode("Employees");?????????????XmlElement?xe1?=?xmlDoc.CreateElement("Node");?????????????xe1.SetAttribute("genre",?"張三");?????????????xe1.SetAttribute("ISBN",?"1-1111-1");?????????????XmlElement?xesub1?=?xmlDoc.CreateElement("title");?????????????xesub1.InnerText?=?"C#入門幫助";?????????????xe1.AppendChild(xesub1);?????????????XmlElement?xesub2?=?xmlDoc.CreateElement("author");?????????????xesub2.InnerText?=?"高手";?????????????xe1.AppendChild(xesub2);?????????????XmlElement?xesub3?=?xmlDoc.CreateElement("price");?????????????xesub3.InnerText?=?"158.3";?????????????xe1.AppendChild(xesub3);?????????????root.AppendChild(xe1);?????????????xmlDoc.Save("data.xml");?? XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("data.xml"); XmlNode root = xmlDoc.SelectSingleNode("Employees");//查找<Employees> XmlElement xe1 = xmlDoc.CreateElement("Node");//創建一個<Node>節點 xe1.SetAttribute("genre", "張三");//設置該節點genre屬性 xe1.SetAttribute("ISBN", "1-1111-1");//設置該節點ISBN屬性 XmlElement xesub1 = xmlDoc.CreateElement("title"); xesub1.InnerText = "C#入門幫助";//設置文本節點 xe1.AppendChild(xesub1);//添加到<Node>節點中 XmlElement xesub2 = xmlDoc.CreateElement("author"); xesub2.InnerText = "高手"; xe1.AppendChild(xesub2); XmlElement xesub3 = xmlDoc.CreateElement("price"); xesub3.InnerText = "158.3"; xe1.AppendChild(xesub3); root.AppendChild(xe1);//添加到<Employees>節點中 xmlDoc.Save("data.xml");
?
3、修改結點的值(屬性和子結點)
view plaincopy to clipboardprint?
XmlDocument?xmlDoc?=?new?XmlDocument();?????????????xmlDoc.Load("data.xml");?????????????XmlNodeList?nodeList?=?xmlDoc.SelectSingleNode("Employees").ChildNodes;?????????????foreach?(XmlNode?xn?in?nodeList)?????????????{?????????????????XmlElement?xe?=?(XmlElement)xn;?????????????????if?(xe.GetAttribute("genre")?==?"張三")?????????????????{?????????????????????xe.SetAttribute("genre",?"update 張三");?????????????????????XmlNodeList?nls?=?xe.ChildNodes;?????????????????????foreach?(XmlNode?xn1?in?nls)?????????????????????{?????????????????????????XmlElement?xe2?=?(XmlElement)xn1;?????????????????????????if?(xe2.Name?==?"author")?????????????????????????{?????????????????????????????xe2.InnerText?=?"亞勝";?????????????????????????}?????????????????????}?????????????????}?????????????}?????????????xmlDoc.Save("data.xml");?? XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("data.xml"); XmlNodeList nodeList = xmlDoc.SelectSingleNode("Employees").ChildNodes;//獲取Employees節點的所有子節點 foreach (XmlNode xn in nodeList)//遍歷所有子節點 { XmlElement xe = (XmlElement)xn;//將子節點類型轉換為XmlElement類型 if (xe.GetAttribute("genre") == "張三")//如果genre屬性值為“張三” { xe.SetAttribute("genre", "update張三");//則修改該屬性為“update張三” XmlNodeList nls = xe.ChildNodes;//繼續獲取xe子節點的所有子節點 foreach (XmlNode xn1 in nls)//遍歷 { XmlElement xe2 = (XmlElement)xn1;//轉換類型 if (xe2.Name == "author")//如果找到 { xe2.InnerText = "亞勝";//則修改 } } } } xmlDoc.Save("data.xml");//保存。 ?
?
?
4、修改結點(添加結點的屬性和添加結點的自結點)
view plaincopy to clipboardprint?
XmlDocument?xmlDoc?=?new?XmlDocument();??????????????xmlDoc.Load("data.xml");??????????????XmlNodeList?nodeList?=?xmlDoc.SelectSingleNode("Employees").ChildNodes;??????????????foreach?(XmlNode?xn?in?nodeList)??????????????{??????????????????XmlElement?xe?=?(XmlElement)xn;??????????????????xe.SetAttribute("test",?"111111");??????????????????XmlElement?xesub?=?xmlDoc.CreateElement("flag");??????????????????xesub.InnerText?=?"1";??????????????????xe.AppendChild(xesub);??????????????}??????????????xmlDoc.Save("data.xml");?? XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("data.xml"); XmlNodeList nodeList = xmlDoc.SelectSingleNode("Employees").ChildNodes;//獲取Employees節點的所有子節點 foreach (XmlNode xn in nodeList) { XmlElement xe = (XmlElement)xn; xe.SetAttribute("test", "111111"); XmlElement xesub = xmlDoc.CreateElement("flag"); xesub.InnerText = "1"; xe.AppendChild(xesub); } xmlDoc.Save("data.xml"); ?
?
?
5、刪除結點中的某一個屬性
view plaincopy to clipboardprint?
XmlDocument?xmlDoc?=?new?XmlDocument();??????????????xmlDoc.Load("data.xml");??????????????XmlNodeList?xnl?=?xmlDoc.SelectSingleNode("Employees").ChildNodes;??????????????foreach?(XmlNode?xn?in?xnl)??????????????{??????????????????XmlElement?xe?=?(XmlElement)xn;??????????????????xe.RemoveAttribute("genre");??????????????????XmlNodeList?nls?=?xe.ChildNodes;??????????????????foreach?(XmlNode?xn1?in?nls)??????????????????{??????????????????????XmlElement?xe2?=?(XmlElement)xn1;??????????????????????if?(xe2.Name?==?"flag")??????????????????????{??????????????????????????xe.RemoveChild(xe2);??????????????????????}??????????????????}??????????????}??????????????xmlDoc.Save("data.xml");??? XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("data.xml"); XmlNodeList xnl = xmlDoc.SelectSingleNode("Employees").ChildNodes; foreach (XmlNode xn in xnl) { XmlElement xe = (XmlElement)xn; xe.RemoveAttribute("genre");//刪除genre屬性 XmlNodeList nls = xe.ChildNodes;//繼續獲取xe子節點的所有子節點 foreach (XmlNode xn1 in nls)//遍歷 { XmlElement xe2 = (XmlElement)xn1;//轉換類型 if (xe2.Name == "flag")//如果找到 { xe.RemoveChild(xe2);//則刪除 } } } xmlDoc.Save("data.xml");
?
?
6、刪除結點
view plaincopy to clipboardprint?
XmlDocument?xmlDoc?=?new?XmlDocument();??????????????xmlDoc.Load("data.xml");??????????????XmlNode?root?=?xmlDoc.SelectSingleNode("Employees");??????????????XmlNodeList?xnl?=?xmlDoc.SelectSingleNode("Employees").ChildNodes;??????????????for?(int?i?=?0;?i?<?xnl.Count;?i++)??????????????{??????????????????XmlElement?xe?=?(XmlElement)xnl.Item(i);??????????????????if?(xe.GetAttribute("genre")?==?"張三")??????????????????{??????????????????????root.RemoveChild(xe);??????????????????????if?(i?<?xnl.Count)?i?=?i?-?1;??????????????????}??????????????}??????????????xmlDoc.Save("data.xml");??? XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("data.xml"); XmlNode root = xmlDoc.SelectSingleNode("Employees"); XmlNodeList xnl = xmlDoc.SelectSingleNode("Employees").ChildNodes; for (int i = 0; i < xnl.Count; i++) { XmlElement xe = (XmlElement)xnl.Item(i); if (xe.GetAttribute("genre") == "張三") { root.RemoveChild(xe); if (i < xnl.Count) i = i - 1; } } xmlDoc.Save("data.xml");
?
?
7、按照文本文件讀取xml
view plaincopy to clipboardprint?
System.IO.StreamReader?myFile?=?new?System.IO.StreamReader("data.xml",?System.Text.Encoding.Default);????????????????????????????string?myString?=?myFile.ReadToEnd();??????????????this.textBox1.Text?=?myString;??????????????myFile.Close();?? System.IO.StreamReader myFile = new System.IO.StreamReader("data.xml", System.Text.Encoding.Default); //注意System.Text.Encoding.Default string myString = myFile.ReadToEnd();//myString是讀出的字符串 this.textBox1.Text = myString; myFile.Close(); ?
?
8、讀取xml
view plaincopy to clipboardprint?
??XmlDocument?xmlDoc?=?new?XmlDocument();????xmlDoc.Load(filename);?????xmlDoc.LoadXml(xmldata);?????XmlNodeList?xn0?=?xmlDoc.SelectSingleNode("Document").ChildNodes;?????foreach?(XmlNode?node?in?xn0)??{??????if?(node.Name?==?匹配的二級節點名)??????{??????????string?innertext?=?node.InnerText.Trim();??????????string?attr?=?node.Attributes[0].ToString();??????}???}??? ?基礎的操作就是這些,要是取三級或三級以上的節點,類似推導即可??
轉載于:https://www.cnblogs.com/yinbo_crazy/archive/2010/07/31/1789301.html
總結
以上是生活随笔為你收集整理的C#操作XML小结的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。