C# 遍历XML文件,添加,更新,删除节点
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# 遍历XML文件,添加,更新,删除节点,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含8610字,纯文字阅读大概需要13分钟。
内容图文
一,将XML文件添加到text文本中:
方法1,最简单方式
1 private void ReadFile() 2 3 { 4 5 string path = Application.StartupPath + @"/bookstore.xml"; 6 7byte[] myByte; 8 9//File.OpenRead(path);1011 myByte = File.ReadAllBytes(path); 1213this.textBox1.Text = string.Empty; 1415//this.textBox1.Text = new UnicodeEncoding().GetString(myByte);1617this.textBox1.Text = Encoding.UTF8.GetString(myByte); 1819 }
方法2,通过分析节点遍历XML添加
1 private void Updata() 2 3 { 4 5 XmlReader reader = null; 6 7try 8 9 { 10 11// 创建XmlReaderSettings对象 12 13 XmlReaderSettings settings = new XmlReaderSettings(); 14 15// 设置XmlReaderSettings对象的属性 16 17 settings.ProhibitDtd = false; 18 19//settings.DtdProcessing = System.Xml.DtdProcessing.Ignore; 20 21// 使用XmlReaderSettings对象来创建XmlReader对象 22 23 reader = XmlReader.Create(path, settings); 24 25 ReadXml(reader); 26 27 } 28 29catch (Exception ex) 30 31 { 32 33 MessageBox.Show(ex.Message); 34 35 } 36 37finally 38 39 { 40 41if (reader != null) 42 43 reader.Close(); 44 45 } 46 47 } 48 49//按节点分析读取 50 51privatevoid ReadXml(XmlReader reader) 52 53 { 54 55this.textBox1.Text = string.Empty; 56 57try 58 59 { 60 61// 解析文件,并显示每一个节点 62 63while (reader.Read()) 64 65 { 66 67switch (reader.NodeType) 68 69 { 70 71case XmlNodeType.Element: 72 73if (reader.IsEmptyElement) // 空元素? 74 75 { 76 77this.textBox1.Text += "<"+ reader.Name + "/>"+"\r\n"; 78 79 } 80 81else 82 83 { 84 85if (reader.HasAttributes) // 属性? 86 87 { 88 89this.textBox1.Text += "<" + reader.Name + ""; 90 91while (reader.MoveToNextAttribute()) 92 93 { 94 95this.textBox1.Text += reader.Name + "=\"" + reader.Value + "\""; 96 97 } 98 99this.textBox1.Text += ">\r\n"; 100101 } 102103else104105this.textBox1.Text += "<" + reader.Name + ">"+"\r\n"; 106107 } 108109break; 110111case XmlNodeType.Text: 112113this.textBox1.Text += reader.Value + "\r\n"; 114115break; 116117case XmlNodeType.CDATA: 118119this.textBox1.Text += "<![CDATA[" + reader.Value + "]]>" + "\r\n"; 120121break; 122123case XmlNodeType.ProcessingInstruction: 124125this.textBox1.Text += "<?" + reader.Name + "" + reader.Value + "?>" + "\r\n"; 126127break; 128129case XmlNodeType.Comment: 130131this.textBox1.Text += "<!--" + reader.Value + "-->" + "\r\n"; 132133break; 134135case XmlNodeType.XmlDeclaration: 136137this.textBox1.Text += "<?xml version=‘1.0‘?>" + "\r\n"; 138139break; 140141case XmlNodeType.Document: 142143break; 144145case XmlNodeType.DocumentType: 146147this.textBox1.Text += "<!DOCTYE " + reader.Name + " [" + reader.Value + "]>" + "\r\n"; 148149break; 150151case XmlNodeType.EntityReference: 152153this.textBox1.Text += reader.Name + "\r\n"; 154155break; 156157case XmlNodeType.EndElement: 158159this.textBox1.Text += "</" + reader.Name + ">" + "\r\n"; 160161break; 162163 } 164165 } 166167 } 168169catch (XmlException ex) 170171 { 172173 MessageBox.Show(ex.Message); 174175 } 176177 }
方法3,读取子节点
1 // 读取子节点 2 private void UpdataXML() 3 { 4 XmlNode xn = xmlDoc.SelectSingleNode("bookstore"); 5 6 XmlNodeList xnl = xn.ChildNodes; 7 8this.textBox1.Text = string.Empty; 910foreach (XmlNode xnf in xnl) 11 { 12 XmlElement xe = (XmlElement)xnf; 13//Console.WriteLine(xe.GetAttribute("genre"));//显示属性值 14//Console.WriteLine(xe.GetAttribute("ISBN"));15 XmlNodeList xnf1 = xe.ChildNodes; 16foreach (XmlNode xn2 in xnf1) 17 { 18//Console.WriteLine(xn2.InnerText);//显示子节点点文本19this.textBox1.Text += xn2.InnerText + "\r\n"; 20 } 21 } 22 }
二,将XML添加到treeView控件中
1 2 private XmlDocument xmlDoc; 3 string path = Application.StartupPath + @"/bookstore.xml"; 4 xmlDoc = new XmlDocument(); 5 xmlDoc.Load(path); 6 treeViewXML.Nodes.Clear(); 7 XmlNode stu = xmlDoc.DocumentElement; 8foreach (XmlNode node in stu.ChildNodes) 9 { 10 TreeNode studentNode; 11 studentNode = treeViewXML.Nodes.Add(node.Name); 12foreach (XmlNode nodes in node.ChildNodes) 13 { 14 studentNode.Nodes.Add(nodes.InnerText); 15 } 16 }
三,创建XML文件
在C#.net中如何操作XML 需要添加的命名空间: using System.Xml;
定义几个公共对象: XmlDocument xmldoc ; XmlNode xmlnode ; XmlElement xmlelem ;
1,创建到服务器同名目录下的xml文件:
1 // 方法一: 2 xmldoc = new XmlDocument ( ) ; 3//加入XML的声明段落,<?xml version="1.0" encoding="gb2312"?> 4XmlDeclaration xmldecl; 5 xmldecl = xmldoc.CreateXmlDeclaration("1.0","gb2312",null); 6 xmldoc.AppendChild ( xmldecl); 7 8//加入一个根元素 9 xmlelem = xmldoc.CreateElement ( "" , "Employees" , "" ) ; 10xmldoc.AppendChild ( xmlelem ) ; 11//加入另外一个元素12for(int i=1;i<3;i++) 13{ 1415 XmlNode root=xmldoc.SelectSingleNode("Employees");//查找<Employees> 16 XmlElement xe1=xmldoc.CreateElement("Node");//创建一个<Node>节点 17 xe1.SetAttribute("genre","李赞红");//设置该节点genre属性 18 xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性1920 XmlElement xesub1=xmldoc.CreateElement("title"); 21 xesub1.InnerText="CS从入门到精通";//设置文本节点 22 xe1.AppendChild(xesub1);//添加到<Node>节点中 23 XmlElement xesub2=xmldoc.CreateElement("author"); 24 xesub2.InnerText="候捷"; 25xe1.AppendChild(xesub2); 26 XmlElement xesub3=xmldoc.CreateElement("price"); 27 xesub3.InnerText="58.3"; 28xe1.AppendChild(xesub3); 2930 root.AppendChild(xe1);//添加到<Employees>节点中 31} 32//保存创建好的XML文档33 xmldoc.Save ( Server.MapPath("data.xml") ) ;
//////////////////////////////////////////////////////////////////////////////////////
结果:在同名目录下生成了名为data.xml的文件,内容如下,
<?xml version="1.0" encoding="gb2312"?>
<Employees>
<Node genre="李赞红" ISBN="2-3631-4">
<title>CS从入门到精通</title>
<author>候捷</author>
<price>58.3</price>
</Node>
<Node genre="李赞红" ISBN="2-3631-4">
<title>CS从入门到精通</title>
<author>候捷</author>
<price>58.3</price>
</Node>
</Employees>
1 方法二: 2 XmlTextWriter xmlWriter; 3 string strFilename = Server.MapPath("data1.xml") ; 4 5 xmlWriter = new XmlTextWriter(strFilename,Encoding.Default);//创建一个xml文档 6 xmlWriter.Formatting = Formatting.Indented; 7 xmlWriter.WriteStartDocument(); 8 xmlWriter.WriteStartElement("Employees"); 910 xmlWriter.WriteStartElement("Node"); 11 xmlWriter.WriteAttributeString("genre","李赞红"); 12 xmlWriter.WriteAttributeString("ISBN","2-3631-4"); 1314 xmlWriter.WriteStartElement("title"); 15 xmlWriter.WriteString("CS从入门到精通"); 16 xmlWriter.WriteEndElement(); 1718 xmlWriter.WriteStartElement("author"); 19 xmlWriter.WriteString("候捷"); 20 xmlWriter.WriteEndElement(); 2122 xmlWriter.WriteStartElement("price"); 23 xmlWriter.WriteString("58.3"); 24 xmlWriter.WriteEndElement(); 2526 xmlWriter.WriteEndElement(); 2728 xmlWriter.Close(); 29//////////////////////////////////////////////////////////////////////////////////////
结果:
<?xml version="1.0" encoding="gb2312"?>
<Employees>
<Node genre="李赞红" ISBN="2-3631-4">
<title>CS从入门到精通</title>
<author>候捷</author>
<price>58.3</price>
</Node>
</Employees>
四,添加节点
1 XmlNode root = xmlDoc.SelectSingleNode("bookstore");//查找<bookstore> 2 XmlElement xe1 = xmlDoc.CreateElement("book");//创建一个<book>节点 3 xe1.SetAttribute("genre", "李赞红");//设置该节点genre属性 4 xe1.SetAttribute("ISBN", "2-3631-4");//设置该节点ISBN属性 5 6 XmlElement xesub1 = xmlDoc.CreateElement("title"); 7 xesub1.InnerText = "CS从入门到精通";//设置文本节点 8 xe1.AppendChild(xesub1);//添加到<book>节点中 910 XmlElement xesub2 = xmlDoc.CreateElement("author"); 11 xesub2.InnerText = "候捷"; 12 xe1.AppendChild(xesub2); 13 XmlElement xesub3 = xmlDoc.CreateElement("price"); 14 xesub3.InnerText = "58.3"; 15 xe1.AppendChild(xesub3); 1617 root.AppendChild(xe1);//添加到<bookstore>节点中18 xmlDoc.Save("bookstore.xml");
五,更新节点
1 XmlNodeList nodeList = xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点 2foreach (XmlNode xn in nodeList)//遍历所有子节点 3 { 4 XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型 5if (xe.GetAttribute("genre") == "李赞红")//如果genre属性值为“李赞红” 6 { 7 xe.SetAttribute("genre", "林芳");//则修改该属性为“update李赞红” 8 9 XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点10foreach (XmlNode xn1 in nls)//遍历11 { 12 XmlElement xe2 = (XmlElement)xn1;//转换类型13if (xe2.Name == "author")//如果找到14 { 15 xe2.InnerText = "李胜";//则修改16break;//找到退出来就可以了17 } 18 } 19break; 20 } 21 } 2223 xmlDoc.Save("bookstore.xml");//保存。
六,删除节点
1 private bool first,second; 2 XmlNodeList xnl = xmlDoc.SelectSingleNode("bookstore").ChildNodes; 3foreach (XmlNode xn in xnl) 4 { 5 XmlElement xe = (XmlElement)xn; 6if (xe.GetAttribute("genre") == "fantasy") 7 { 8 xe.RemoveAttribute("genre");//删除genre属性 9 first = true; 10 } 11elseif (xe.GetAttribute("genre") == "林芳") 12 { 13 xe.RemoveAll();//删除该节点的全部内容14 second = true; 15 } 16if (first && second) 17break; 18 } 19 xmlDoc.Save("bookstore.xml");
原文:http://www.cnblogs.com/ygd-boke/p/4398256.html
内容总结
以上是互联网集市为您收集整理的C# 遍历XML文件,添加,更新,删除节点全部内容,希望文章能够帮你解决C# 遍历XML文件,添加,更新,删除节点所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。