C#操作XML⽅法详解
 本⽂的主要模块为:
    ① :⽣成xml⽂件
    ② :遍历xml⽂件的节点信息
    ③ :修改xml⽂件的节点信息
    ④ :向xml⽂件添加节点信息
    ⑤ :删除指定xml⽂件的节点信息
·假设我们需要设计出这样的⼀个xml⽂件来存储相应的信息,如下所⽰:
1
2<Computers>
3  <Computer ID="11111111" Description="Made in China">
4    <name>Lenovo</name>
5    <price>5000</price>
6  </Computer>
7  <Computer ID="2222222" Description="Made in USA">
8    <name>IBM</name>
9    <price>10000</price>
10  </Computer>
11</Computers>
 那么如何⽣成这个xml⽂件?⼜怎么读取这个xml⽂件的节点信息,以及如何对这个xml⽂件的节点信息作相应的操作?请看如下代码⽰例:
【注:因为我们要使⽤xml相关的语法和⽅法,所以⼀定要引⼊命名空间 System.Xml】
1
2  using System;
3    using System.Collections.Generic;
4    using System.Linq;
5    using System.Text;
6    using System.Xml;
7
8    namespace OperateXML
9  {
10      class Program
11    {
12        static void Main(string[] args)
13        {
14            try
15            {
16                //xml⽂件存储路径
17                string myXMLFilePath = "E:\\l";
18                //⽣成xml⽂件
19                GenerateXMLFile(myXMLFilePath);
20                //遍历xml⽂件的信息
21                GetXMLInformation(myXMLFilePath);
22                //修改xml⽂件的信息
23                ModifyXmlInformation(myXMLFilePath);
24                //向xml⽂件添加节点信息
25                AddXmlInformation(myXMLFilePath);
26                //删除指定节点信息
27                DeleteXmlInformation(myXMLFilePath);
28            }
29            catch (Exception ex)
30            {
31                Console.WriteLine(ex.ToString());
32            }
32            }
33        }
34
35        private static void GenerateXMLFile(string xmlFilePath)
36        {
37            try
38            {
39                //初始化⼀个xml实例
40                XmlDocument myXmlDoc = new XmlDocument();
41                //创建xml的根节点
42                XmlElement rootElement = myXmlDoc.CreateElement("Computers");
43                //将根节点加⼊到xml⽂件中(AppendChild)
44                myXmlDoc.AppendChild(rootElement);
45
46                //初始化第⼀层的第⼀个⼦节点
47                XmlElement firstLevelElement1 = myXmlDoc.CreateElement("Computer");
48                //填充第⼀层的第⼀个⼦节点的属性值(SetAttribute)
49                firstLevelElement1.SetAttribute("ID", "11111111");
50                firstLevelElement1.SetAttribute("Description", "Made in China");
51                //将第⼀层的第⼀个⼦节点加⼊到根节点下
52                rootElement.AppendChild(firstLevelElement1);
53                //初始化第⼆层的第⼀个⼦节点
54                XmlElement secondLevelElement11 = myXmlDoc.CreateElement("name");
55                //填充第⼆层的第⼀个⼦节点的值(InnerText)
56                secondLevelElement11.InnerText = "Lenovo";
57                firstLevelElement1.AppendChild(secondLevelElement11);
58                XmlElement secondLevelElement12 = myXmlDoc.CreateElement("price");
59                secondLevelElement12.InnerText = "5000";
60                firstLevelElement1.AppendChild(secondLevelElement12);
61
62
63                XmlElement firstLevelElement2 = myXmlDoc.CreateElement("Computer");
64                firstLevelElement2.SetAttribute("ID", "2222222");
65                firstLevelElement2.SetAttribute("Description", "Made in USA");
66                rootElement.AppendChild(firstLevelElement2);
67                XmlElement secondLevelElement21 = myXmlDoc.CreateElement("name");
68                secondLevelElement21.InnerText = "IBM";
69                firstLevelElement2.AppendChild(secondLevelElement21);
70                XmlElement secondLevelElement22 = myXmlDoc.CreateElement("price");
71                secondLevelElement22.InnerText = "10000";
72                firstLevelElement2.AppendChild(secondLevelElement22);
73
74                //将xml⽂件保存到指定的路径下
75                myXmlDoc.Save(xmlFilePath);
76            }
77            catch (Exception ex)
78            {
79                Console.WriteLine(ex.ToString());
80            }
81        }
82
83        private static void GetXMLInformation(string xmlFilePath)
84        {
85            try
86            {
87                //初始化⼀个xml实例
88                XmlDocument myXmlDoc = new XmlDocument();
89                //加载xml⽂件(参数为xml⽂件的路径)
90                myXmlDoc.Load(xmlFilePath);
91                //获得第⼀个姓名匹配的节点(SelectSingleNode):此xml⽂件的根节点
92                XmlNode rootNode = myXmlDoc.SelectSingleNode("Computers");
93                //分别获得该节点的InnerXml和OuterXml信息
94                string innerXmlInfo = rootNode.InnerXml.ToString();
95                string outerXmlInfo = rootNode.OuterXml.ToString();
96                //获得该节点的⼦节点(即:该节点的第⼀层⼦节点)
97                XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
97                XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
98                foreach (XmlNode node in firstLevelNodeList)
99                {
100                    //获得该节点的属性集合
101                    XmlAttributeCollection attributeCol = node.Attributes;
102                    foreach (XmlAttribute attri in attributeCol)
103                    {
104                        //获取属性名称与属性值
105                        string name = attri.Name;
106                        string value = attri.Value;
107                        Console.WriteLine("{0} = {1}", name, value);
108                    }
109
110                    //判断此节点是否还有⼦节点
111                    if (node.HasChildNodes)
112                    {
113                        //获取该节点的第⼀个⼦节点
114                        XmlNode secondLevelNode1 = node.FirstChild;
115                        //获取该节点的名字
116                        string name = secondLevelNode1.Name;
117                        //获取该节点的值(即:InnerText)
118                        string innerText = secondLevelNode1.InnerText;
119                        Console.WriteLine("{0} = {1}", name, innerText);
120
121                        //获取该节点的第⼆个⼦节点(⽤数组下标获取)
122                        XmlNode secondLevelNode2 = node.ChildNodes[1];
123                        name = secondLevelNode2.Name;
124                        innerText = secondLevelNode2.InnerText;
125                        Console.WriteLine("{0} = {1}", name, innerText);
126                    }
127                }
128            }
129            catch (Exception ex)
130            {
131                Console.WriteLine(ex.ToString());
132            }
133        }
134
135        private static void ModifyXmlInformation(string xmlFilePath)
136        {
137            try
138            {
139                XmlDocument myXmlDoc = new XmlDocument();
140                myXmlDoc.Load(xmlFilePath);
141                XmlNode rootNode = myXmlDoc.FirstChild;
142                XmlNodeList firstLevelNodeList = rootNode.ChildNodes;
143                foreach (XmlNode node in firstLevelNodeList)
144                {
145                    //修改此节点的属性值
146                    if (node.Attributes["Description"].Value.Equals("Made in USA")) 147                    {
148                        node.Attributes["Description"].Value = "Made in HongKong"; 149                    }
150                }
151                //要想使对xml⽂件所做的修改⽣效,必须执⾏以下Save⽅法
152                myXmlDoc.Save(xmlFilePath);
153            }
154            catch (Exception ex)
155            {
writeline教程
156                Console.WriteLine(ex.ToString());
157            }
158
159        }
160
161        private static void AddXmlInformation(string xmlFilePath)
162        {
162        {
163            try
164            {
165                XmlDocument myXmlDoc = new XmlDocument();
166                myXmlDoc.Load(xmlFilePath);
167                //添加⼀个带有属性的节点信息
168                foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)
169                {
170                    XmlElement newElement = myXmlDoc.CreateElement("color");
171                    newElement.InnerText = "black";
172                    newElement.SetAttribute("IsMixed", "Yes");
173                    node.AppendChild(newElement);
174                }
175                //保存更改
176                myXmlDoc.Save(xmlFilePath);
177            }
178            catch (Exception ex)
179            {
180                Console.WriteLine(ex.ToString());
181            }
182        }
183
184        private static void DeleteXmlInformation(string xmlFilePath)
185        {
186            try
187            {
188                XmlDocument myXmlDoc = new XmlDocument();
189                myXmlDoc.Load(xmlFilePath);
190                foreach (XmlNode node in myXmlDoc.FirstChild.ChildNodes)
191                {
192                    //记录该节点下的最后⼀个⼦节点(简称:最后⼦节点)
193                    XmlNode lastNode = node.LastChild;
194                    //删除最后⼦节点下的左右⼦节点
195                    lastNode.RemoveAll();
196                    //删除最后⼦节点
197                    node.RemoveChild(lastNode);
198                }
199                //保存对xml⽂件所做的修改
200                myXmlDoc.Save(xmlFilePath);
201            }
202            catch (Exception ex)
203            {
204                Console.WriteLine(ex.ToString());
205            }
206        }
207    }
208 }
上⾯的这个例⼦,⾸先是通过GenerateXMLFile⽅法在E盘创建出了我们预想的xml⽂件;然后通过GetXMLInformation⽅法对刚刚⽣成的xml⽂件进⾏了信息的读取;
之后通过ModifyXmlInformation⽅法对xml⽂件信息作出相应的修改(<Computer ID="2222222" Description="Made in USA">
修改成为<Computer ID="2222222" Description="Made in HongKong">);再之后通过AddXmlInformation⽅法向xml⽂件中添加了⼀个带有属性值的color节点;
最后通过DeleteXmlInformation⽅法将刚刚添加上的color节点删除掉。⾄此完成了对xml⽂件的基本操作:创建、读取、修改、添加、删除。
【注1:想要将对xml⽂件所做的任何修改⽣效的话,必须调⽤Save⽅法,否则我们所做的修改不会保存】
【注2:我们在创建节点的时候⽤的是XmlElement,但是读取节点信息的时候却⽤的是XmlNode,这⾥强调⼀点:XmlElement是XmlNode的继承,可以调⽤更多的⽅法实现相应所需的功能】
  最后简单集中的总结⼀下对xml进⾏操作的基本⽅法,如下所⽰:
1
2    //所需要添加的命名空间
3    using System.Xml;
4    //初始化⼀个xml实例
5    XmlDocument xml=new XmlDocument();
6    //导⼊指定xml⽂件
7    xml.Load(“xml⽂件路径path”);
8    //指定⼀个节点
9    XmlNode root=xml.SelectSingleNode("节点名称");
10    //获取节点下所有直接⼦节点
11    XmlNodeList childlist=root.ChildNodes;
12    //判断该节点下是否有⼦节点
13    root.HasChildNodes;
14    //获取同名同级节点集合
15    XmlNodeList nodelist=xml.SelectNodes("节点名称");
16    //⽣成⼀个新节点
17    XmlElement node=xml.CreateElement("节点名称");
18    //将节点加到指定节点下,作为其⼦节点
19    root.AppendChild(node);
20    //将节点加到指定节点下某个⼦节点前
21    root.InsertBefore(node,root.ChildeNodes[i]);
22    //为指定节点的新建属性并赋值
23    node.SetAttribute("id","11111");
24    //为指定节点添加⼦节点
25    root.AppendChild(node);
26    //获取指定节点的指定属性值
27    string id=node.Attributes["id"].Value;
28    //获取指定节点中的⽂本
29    string content=node.InnerText;
30    //保存XML⽂件
31    xml.Save(“xml⽂件存储的路径path”);
第⼆种:
1using System.Xml;
2//初始化⼀个xml实例
3XmlDocument xml=new XmlDocument();
4
5//导⼊指定xml⽂件
6xml.Load(path);
7xml.Load(HttpContext.Current.Server.MapPath("~/l"));
8
9//指定⼀个节点
10XmlNode root=xml.SelectSingleNode("/root");
11
12//获取节点下所有直接⼦节点
13XmlNodeList childlist=root.ChildNodes;
14
15//判断该节点下是否有⼦节点
16root.HasChildNodes;
17
18//获取同名同级节点集合
19XmlNodeList nodelist=xml.SelectNodes("/Root/News");
20
21//⽣成⼀个新节点
22XmlElement node=xml.CreateElement("News");
23
24//将节点加到指定节点下,作为其⼦节点
25root.AppendChild(node);
26
27//将节点加到指定节点下某个⼦节点前

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。