在C#.net中如何操作XML

在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>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus