在C#.net中如何操作XML
需要添加的命名空间:
using System.Xml;
定义几个公共对象:
XmlDocument xmldoc ;
XmlNode xmlnode ;
XmlElement xmlelem ;
1,创建到服务器同名目录下的xml文件:
方法一:
xmldoc = new XmlDocument ( ) ;
//加入XML的声明段落
xmlnode = xmldoc.CreateNode ( XmlNodeType.XmlDeclaration , "" , "" ) ;
xmldoc.AppendChild ( xmlnode ) ;
//加入一个根元素
xmlelem = xmldoc.CreateElement ( "" , "Employees" , "" ) ;
xmldoc.AppendChild ( xmlelem ) ;
//加入另外一个元素
for(int i=1;i<3;i++)
{
XmlNode root=xmldoc.SelectSingleNode("Employees");//查找
1<employees>
2XmlElement xe1=xmldoc.CreateElement("Node");//创建一个<node>节点
3xe1.SetAttribute("genre","李赞红");//设置该节点genre属性
4xe1.SetAttribute("ISBN","2-3631-4");//设置该节点ISBN属性
5
6XmlElement xesub1=xmldoc.CreateElement("title");
7xesub1.InnerText="CS从入门到精通";//设置文本节点
8xe1.AppendChild(xesub1);//添加到<node>节点中
9XmlElement xesub2=xmldoc.CreateElement("author");
10xesub2.InnerText="候捷";
11xe1.AppendChild(xesub2);
12XmlElement xesub3=xmldoc.CreateElement("price");
13xesub3.InnerText="58.3";
14xe1.AppendChild(xesub3);
15
16root.AppendChild(xe1);//添加到<employees>节点中
17}
18//保存创建好的XML文档
19xmldoc.Save ( Server.MapPath("data.xml") ) ;
20
21//////////////////////////////////////////////////////////////////////////////////////
22结果:在同名目录下生成了名为data.xml的文件,内容如下,
23<?xml version="1.0"?>
24<employees>
25<node genre="李赞红" isbn="2-3631-4">
26<title>CS从入门到精通</title>
27<author>候捷</author>
28<price>58.3</price>
29</node>
30<node genre="李赞红" isbn="2-3631-4">
31<title>CS从入门到精通</title>
32<author>候捷</author>
33<price>58.3</price>
34</node>
35</employees>
36
37
38方法二:
39XmlTextWriter xmlWriter;
40string strFilename = Server.MapPath("data1.xml") ;
41
42xmlWriter = new XmlTextWriter(strFilename,Encoding.Default);//创建一个xml文档
43xmlWriter.Formatting = Formatting.Indented;
44xmlWriter.WriteStartDocument();
45xmlWriter.WriteStartElement("Employees");
46
47xmlWriter.WriteStartElement("Node");
48xmlWriter.WriteAttributeString("genre","李赞红");
49xmlWriter.WriteAttributeString("ISBN","2-3631-4");
50
51xmlWriter.WriteStartElement("title");
52xmlWriter.WriteString("CS从入门到精通");
53xmlWriter.WriteEndElement();
54
55xmlWriter.WriteStartElement("author");
56xmlWriter.WriteString("候捷");
57xmlWriter.WriteEndElement();
58
59xmlWriter.WriteStartElement("price");
60xmlWriter.WriteString("58.3");
61xmlWriter.WriteEndElement();
62
63xmlWriter.WriteEndElement();
64
65xmlWriter.Close();
66//////////////////////////////////////////////////////////////////////////////////////
67结果:
68<?xml version="1.0" encoding="gb2312"?>
69<employees>
70<node genre="李赞红" isbn="2-3631-4">
71<title>CS从入门到精通</title>
72<author>候捷</author>
73<price>58.3</price>
74</node>
75</employees>
76
772,添加一个结点:
78
79XmlDocument xmlDoc=new XmlDocument();
80xmlDoc.Load(Server.MapPath("data.xml"));
81XmlNode root=xmlDoc.SelectSingleNode("Employees");//查找<employees>
82XmlElement xe1=xmlDoc.CreateElement("Node");//创建一个<node>节点
83xe1.SetAttribute("genre","张三");//设置该节点genre属性
84xe1.SetAttribute("ISBN","1-1111-1");//设置该节点ISBN属性
85
86XmlElement xesub1=xmlDoc.CreateElement("title");
87xesub1.InnerText="C#入门帮助";//设置文本节点
88xe1.AppendChild(xesub1);//添加到<node>节点中
89XmlElement xesub2=xmlDoc.CreateElement("author");
90xesub2.InnerText="高手";
91xe1.AppendChild(xesub2);
92XmlElement xesub3=xmlDoc.CreateElement("price");
93xesub3.InnerText="158.3";
94xe1.AppendChild(xesub3);
95
96root.AppendChild(xe1);//添加到<employees>节点中
97xmlDoc.Save ( Server.MapPath("data.xml") );
98
99//////////////////////////////////////////////////////////////////////////////////////
100结果:在xml原有的内容里添加了一个结点,内容如下,
101<?xml version="1.0"?>
102<employees>
103<node genre="李赞红" isbn="2-3631-4">
104<title>CS从入门到精通</title>
105<author>候捷</author>
106<price>58.3</price>
107</node>
108<node genre="李赞红" isbn="2-3631-4">
109<title>CS从入门到精通</title>
110<author>候捷</author>
111<price>58.3</price>
112</node>
113<node genre="张三" isbn="1-1111-1">
114<title>C#入门帮助</title>
115<author>高手</author>
116<price>158.3</price>
117</node>
118</employees>
119
1203,修改结点的值(属性和子结点):
121
122XmlDocument xmlDoc=new XmlDocument();
123xmlDoc.Load( Server.MapPath("data.xml") );
124
125XmlNodeList nodeList=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点
126
127foreach(XmlNode xn in nodeList)//遍历所有子节点
128{
129XmlElement xe=(XmlElement)xn;//将子节点类型转换为XmlElement类型
130if(xe.GetAttribute("genre")=="张三")//如果genre属性值为“张三”
131{
132xe.SetAttribute("genre","update张三");//则修改该属性为“update张三”
133
134XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
135foreach(XmlNode xn1 in nls)//遍历
136{
137XmlElement xe2=(XmlElement)xn1;//转换类型
138if(xe2.Name=="author")//如果找到
139{
140xe2.InnerText="亚胜";//则修改
141}
142}
143}
144}
145xmlDoc.Save( Server.MapPath("data.xml") );//保存。
146
147//////////////////////////////////////////////////////////////////////////////////////
148结果:将原来的所有结点的信息都修改了,xml的内容如下,
149<?xml version="1.0"?>
150<employees>
151<node genre="李赞红" isbn="2-3631-4">
152<title>CS从入门到精通</title>
153<author>候捷</author>
154<price>58.3</price>
155</node>
156<node genre="李赞红" isbn="2-3631-4">
157<title>CS从入门到精通</title>
158<author>候捷</author>
159<price>58.3</price>
160</node>
161<node genre="update张三" isbn="1-1111-1">
162<title>C#入门帮助</title>
163<author>亚胜</author>
164<price>158.3</price>
165</node>
166</employees>
167
1684,修改结点(添加结点的属性和添加结点的自结点):
169XmlDocument xmlDoc=new XmlDocument();
170xmlDoc.Load( Server.MapPath("data.xml") );
171
172XmlNodeList nodeList=xmlDoc.SelectSingleNode("Employees").ChildNodes;//获取Employees节点的所有子节点
173
174foreach(XmlNode xn in nodeList)
175{
176XmlElement xe=(XmlElement)xn;
177xe.SetAttribute("test","111111");
178
179XmlElement xesub=xmlDoc.CreateElement("flag");
180xesub.InnerText="1";
181xe.AppendChild(xesub);
182}
183xmlDoc.Save( Server.MapPath("data.xml") );
184
185//////////////////////////////////////////////////////////////////////////////////////
186结果:每个结点的属性都添加了一个,子结点也添加了一个,内容如下,
187<?xml version="1.0"?>
188<employees>
189<node genre="李赞红" isbn="2-3631-4" test="111111">
190<title>CS从入门到精通</title>
191<author>候捷</author>
192<price>58.3</price>
193<flag>1</flag>
194</node>
195<node genre="李赞红" isbn="2-3631-4" test="111111">
196<title>CS从入门到精通</title>
197<author>候捷</author>
198<price>58.3</price>
199<flag>1</flag>
200</node>
201<node genre="update张三" isbn="1-1111-1" test="111111">
202<title>C#入门帮助</title>
203<author>亚胜</author>
204<price>158.3</price>
205<flag>1</flag>
206</node>
207</employees>
208
2095,删除结点中的某一个属性:
210XmlDocument xmlDoc=new XmlDocument();
211xmlDoc.Load( Server.MapPath("data.xml") );
212XmlNodeList xnl=xmlDoc.SelectSingleNode("Employees").ChildNodes;
213foreach(XmlNode xn in xnl)
214{
215XmlElement xe=(XmlElement)xn;
216xe.RemoveAttribute("genre");//删除genre属性
217
218XmlNodeList nls=xe.ChildNodes;//继续获取xe子节点的所有子节点
219foreach(XmlNode xn1 in nls)//遍历
220{
221XmlElement xe2=(XmlElement)xn1;//转换类型
222if(xe2.Name=="flag")//如果找到
223{
224xe.RemoveChild(xe2);//则删除
225}
226}
227}
228xmlDoc.Save( Server.MapPath("data.xml") );
229
230//////////////////////////////////////////////////////////////////////////////////////]
231结果:删除了结点的一个属性和结点的一个子结点,内容如下,
232<?xml version="1.0"?>
233<employees>
234<node isbn="2-3631-4" test="111111">
235<title>CS从入门到精通</title>
236<author>候捷</author>
237<price>58.3</price>
238</node>
239<node isbn="2-3631-4" test="111111">
240<title>CS从入门到精通</title>
241<author>候捷</author>
242<price>58.3</price>
243</node>
244<node isbn="1-1111-1" test="111111">
245<title>C#入门帮助</title>
246<author>亚胜</author>
247<price>158.3</price>
248</node>
249</employees>
250
2516,删除结点:
252XmlDocument xmlDoc=new XmlDocument();
253xmlDoc.Load( Server.MapPath("data.xml") );
254XmlNode root=xmlDoc.SelectSingleNode("Employees");
255XmlNodeList xnl=xmlDoc.SelectSingleNode("Employees").ChildNodes;
256for(int i=0;i<xnl.count;i++) )="" );="" <?xml="" ?="" ]="" if(i<xnl.count)i="i-1;" if(xe.getattribute("genre")="张三" root.removechild(xe);="" server.mappath("data.xml")="" version="1.0" xe="(XmlElement)xnl.Item(i);" xmldoc.save(="" xmlelement="" {="" }="" 结果:删除了符合条件的所有结点,原来的内容:="">
257<employees>
258<node genre="李赞红" isbn="2-3631-4">
259<title>CS从入门到精通</title>
260<author>候捷</author>
261<price>58.3</price>
262</node>
263<node genre="李赞红" isbn="2-3631-4">
264<title>CS从入门到精通</title>
265<author>候捷</author>
266<price>58.3</price>
267</node>
268<node genre="张三" isbn="1-1111-1">
269<title>C#入门帮助</title>
270<author>高手</author>
271<price>158.3</price>
272</node>
273<node genre="张三" isbn="1-1111-1">
274<title>C#入门帮助</title>
275<author>高手</author>
276<price>158.3</price>
277</node>
278</employees>
279
280删除后的内容:
281<?xml version="1.0"?>
282<employees>
283<node genre="李赞红" isbn="2-3631-4">
284<title>CS从入门到精通</title>
285<author>候捷</author>
286<price>58.3</price>
287</node>
288<node genre="李赞红" isbn="2-3631-4">
289<title>CS从入门到精通</title>
290<author>候捷</author>
291<price>58.3</price>
292</node>
293</employees></xnl.count;i++)></employees></node></node></employees></employees></node></node></employees>