C# 遍历XML文件,添加,更新,删除节点

一,将XML文件添加到text文本中:

方法1,最简单方式

 1 private void ReadFile()
 2
 3  {
 4
 5     string path =  Application.StartupPath + @"/bookstore.xml";
 6
 7             byte[] myByte;
 8
 9              //File.OpenRead(path);
10
11              myByte = File.ReadAllBytes(path);
12
13             this.textBox1.Text = string.Empty;
14
15             //this.textBox1.Text = new UnicodeEncoding().GetString(myByte);
16
17              this.textBox1.Text = Encoding.UTF8.GetString(myByte);
18
19 }

方法2,通过分析节点遍历XML添加

  1 private void Updata()
  2
  3 {
  4
  5             XmlReader reader = null;
  6
  7             try
  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
 29            catch (Exception ex)
 30
 31             {
 32
 33                 MessageBox.Show(ex.Message);
 34
 35              }
 36
 37              finally
 38
 39              {
 40
 41                  if (reader != null)
 42
 43                      reader.Close();
 44
 45              }
 46
 47         }
 48
 49         //按节点分析读取
 50
 51          private void ReadXml(XmlReader reader)
 52
 53          {
 54
 55              this.textBox1.Text = string.Empty;
 56
 57              try
 58
 59             {
 60
 61                 // 解析文件,并显示每一个节点
 62
 63                 while (reader.Read())
 64
 65                {
 66
 67                      switch (reader.NodeType)
 68
 69                      {
 70
 71                        case XmlNodeType.Element:
 72
 73                             if (reader.IsEmptyElement) // 空元素?
 74
 75                              {
 76
 77                                 this.textBox1.Text += "<"+ reader.Name + "/>"+"\r\n";
 78
 79                             }
 80
 81                             else
 82
 83                              {
 84
 85                                 if (reader.HasAttributes)   // 属性?
 86
 87                                  {
 88
 89                                     this.textBox1.Text += "<" + reader.Name + " ";
 90
 91                                      while (reader.MoveToNextAttribute())
 92
 93                                     {
 94
 95                                          this.textBox1.Text += reader.Name + "=\"" + reader.Value + "\"";
 96
 97                                      }
 98
 99                                      this.textBox1.Text += ">\r\n";
100
101                                  }
102
103                                 else
104
105                                     this.textBox1.Text += "<" + reader.Name + ">"+"\r\n";
106
107                             }
108
109                             break;
110
111                         case XmlNodeType.Text:
112
113                             this.textBox1.Text += reader.Value + "\r\n";
114
115                             break;
116
117                          case XmlNodeType.CDATA:
118
119                              this.textBox1.Text += "<![CDATA[" + reader.Value + "]]>" + "\r\n";
120
121                              break;
122
123                          case XmlNodeType.ProcessingInstruction:
124
125                              this.textBox1.Text += "<?" + reader.Name + " " + reader.Value + "?>" + "\r\n";
126
127                              break;
128
129                          case XmlNodeType.Comment:
130
131                              this.textBox1.Text += "<!--" + reader.Value + "-->" + "\r\n";
132
133                              break;
134
135                          case XmlNodeType.XmlDeclaration:
136
137                              this.textBox1.Text += "<?xml version=‘1.0‘?>" + "\r\n";
138
139                              break;
140
141                          case XmlNodeType.Document:
142
143                              break;
144
145                          case XmlNodeType.DocumentType:
146
147                              this.textBox1.Text += "<!DOCTYE " + reader.Name + " [" + reader.Value + "]>" + "\r\n";
148
149                             break;
150
151                          case XmlNodeType.EntityReference:
152
153                              this.textBox1.Text += reader.Name + "\r\n";
154
155                             break;
156
157                          case XmlNodeType.EndElement:
158
159                              this.textBox1.Text += "</" + reader.Name + ">" + "\r\n";
160
161                             break;
162
163                      }
164
165                 }
166
167             }
168
169             catch (XmlException ex)
170
171              {
172
173                  MessageBox.Show(ex.Message);
174
175              }
176
177          }

方法3,读取子节点

 1  //读取子节点
 2         private void UpdataXML()
 3         {
 4             XmlNode xn = xmlDoc.SelectSingleNode("bookstore");
 5
 6             XmlNodeList xnl = xn.ChildNodes;
 7
 8             this.textBox1.Text = string.Empty;
 9
10             foreach (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;
16                 foreach (XmlNode xn2 in xnf1)
17                 {
18                     //Console.WriteLine(xn2.InnerText);//显示子节点点文本
19                     this.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;
 8             foreach (XmlNode node in stu.ChildNodes)
 9             {
10                 TreeNode studentNode;
11                 studentNode = treeViewXML.Nodes.Add(node.Name);
12                 foreach (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"?>
 4 XmlDeclaration xmldecl;
 5  xmldecl = xmldoc.CreateXmlDeclaration("1.0","gb2312",null);
 6  xmldoc.AppendChild ( xmldecl);
 7
 8 //加入一个根元素
 9 xmlelem = xmldoc.CreateElement ( "" , "Employees" , "" ) ;
10 xmldoc.AppendChild ( xmlelem ) ;
11 //加入另外一个元素
12 for(int i=1;i<3;i++)
13 {
14
15 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属性
19
20 XmlElement xesub1=xmldoc.CreateElement("title");
21 xesub1.InnerText="CS从入门到精通";//设置文本节点
22 xe1.AppendChild(xesub1);//添加到<Node>节点中
23 XmlElement xesub2=xmldoc.CreateElement("author");
24 xesub2.InnerText="候捷";
25 xe1.AppendChild(xesub2);
26 XmlElement xesub3=xmldoc.CreateElement("price");
27 xesub3.InnerText="58.3";
28 xe1.AppendChild(xesub3);
29
30 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");
 9
10    xmlWriter.WriteStartElement("Node");
11    xmlWriter.WriteAttributeString("genre","李赞红");
12    xmlWriter.WriteAttributeString("ISBN","2-3631-4");
13
14    xmlWriter.WriteStartElement("title");
15    xmlWriter.WriteString("CS从入门到精通");
16    xmlWriter.WriteEndElement();
17
18    xmlWriter.WriteStartElement("author");
19    xmlWriter.WriteString("候捷");
20    xmlWriter.WriteEndElement();
21
22    xmlWriter.WriteStartElement("price");
23    xmlWriter.WriteString("58.3");
24    xmlWriter.WriteEndElement();
25
26    xmlWriter.WriteEndElement();
27
28    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>节点中
 9
10             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);
16
17             root.AppendChild(xe1);//添加到<bookstore>节点中
18             xmlDoc.Save("bookstore.xml");

五,更新节点

 1                   XmlNodeList nodeList = xmlDoc.SelectSingleNode("bookstore").ChildNodes;//获取bookstore节点的所有子节点
 2             foreach (XmlNode xn in nodeList)//遍历所有子节点
 3             {
 4                 XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
 5                 if (xe.GetAttribute("genre") == "李赞红")//如果genre属性值为“李赞红”
 6                 {
 7                     xe.SetAttribute("genre", "林芳");//则修改该属性为“update李赞红”
 8
 9                     XmlNodeList nls = xe.ChildNodes;//继续获取xe子节点的所有子节点
10                     foreach (XmlNode xn1 in nls)//遍历
11                     {
12                         XmlElement xe2 = (XmlElement)xn1;//转换类型
13                         if (xe2.Name == "author")//如果找到
14                         {
15                             xe2.InnerText = "李胜";//则修改
16                             break;//找到退出来就可以了
17                         }
18                     }
19                     break;
20                 }
21             }
22
23             xmlDoc.Save("bookstore.xml");//保存。

六,删除节点

 1             private bool first,second;
 2             XmlNodeList xnl = xmlDoc.SelectSingleNode("bookstore").ChildNodes;
 3             foreach (XmlNode xn in xnl)
 4             {
 5                 XmlElement xe = (XmlElement)xn;
 6                 if (xe.GetAttribute("genre") == "fantasy")
 7                 {
 8                     xe.RemoveAttribute("genre");//删除genre属性
 9                     first = true;
10                 }
11                 else if (xe.GetAttribute("genre") == "林芳")
12                 {
13                     xe.RemoveAll();//删除该节点的全部内容
14                     second = true;
15                 }
16                 if (first && second)
17                     break;
18             }
19             xmlDoc.Save("bookstore.xml");
时间: 2024-08-08 18:12:05

C# 遍历XML文件,添加,更新,删除节点的相关文章

遍历XML文件添加到TreeView递归调用

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml.Linq; namespace 遍历X

.Net常用技巧_操作xml文件教程(插入节点、修改、删除)

已知有一个XML文件(bookstore.xml)如下:     <?xml   version="1.0"   encoding="gb2312"?>     <bookstore>         <book   genre="fantasy"   ISBN="2-3631-4">             <title>Oberon's   Legacy</title&

hadoop集群 动态添加或删除节点

在运行中的ambari hadoop集中中动态添加或删除节点 1. 下线hdfs节点 1) 下线datanode namenode节点上dfs.exclude文件,看配置文件怎么配置的,里每行添加一个服务器名,如我要下线server7,server8,server9,则如下: server7 server8 备注: 如果hdfs-site.xml没有找到dfs.hosts.exclude,那么就手动把下面内容加入到hdfs-site.xml中,然后把需要Decommission的机器写到文件/e

学习XML(添加一个子节点) 摘录

reference:http://blog.csdn.net/you_laner/article/details/1112129 这里介绍添加XML节点的方法. 首先定义XML文件:(bookstore.xml) <?xml version="1.0" encoding="utf-8"?> <bookstore> <book genre="fantasy" ISBN="2-9088-1">

遍历XML文件

#encoding=utf-8 from xml.etree import ElementTree as ET #要找出所有人的年龄 per=ET.parse('d:\\1.xml') p=per.findall('./STATION') for x in p: print x.attrib print for oneper in p: #找出person节点 for child in oneper.getchildren(): #找出person节点的子节点 print child.tag,'

添加和删除节点(HTML 元素)。

JavaScript HTML DOM 元素(节点) 添加和删除节点(HTML 元素). 创建新的 HTML 元素 如需向 HTML DOM 添加新元素,您必须首先创建该元素(元素节点),然后向一个已存在的元素追加该元素. 实例 <div id="div1"> <p id="p1">这是一个段落</p> <p id="p2">这是另一个段落</p> </div> <sc

添加和删除节点

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>添加和删除节点</title></head><body> <div id="div1"> <p id="p1">这是一个段落</p> <p id="

etcd 添加、删除节点操作。非k8s情况

非k8s情况下,维护etcd,手动添加.删除节点 注意:4001为对外提供服务的端口,7001为节点间交互的借口 /export/App/etcd-v3.3.12/etcdctl --endpoints="http://172.28.178.53:4001,http://172.28.178.70:4001,http://172.28.178.34:4001" member add etcd2 http://11.5.104.2:7001 /export/App/etcd-v3.3.1

Dom4j 添加 / 更新 / 删除 XML

1.获得文档 /** *1.获得解析流 *2.解析XML */ 2.添加 /** *1.获取父元素 *2.创建元素 *3.创建属性并添加到元素中 *4.元素添加到根节点 */ 3.更新 /** *1.获取结点 *2.转化为元素 *3.获取子元素 *4.更改 */ 4.删除 /** *1.获得结点 *2.转换为元素 *3.获得父元素 *4.移除 */ 5.保存 /** *1.创建输出对象 *2.添加内容对象 *3.关闭输出流 */ 获得文档 //获取文档 private static Docume