|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。xml一向想要写一个操纵XML文件的类,明天在网上找了一下,找到一个已写的差未几的类,对其举行扩大与修正,终极成了以下代码,供老手参考参考.
//
在此类顶用到了XML事务.此类中关于节点的查找必须用xpath表达式,假如你对xpath表达式不懂得能够检察我保藏的别的一篇文章:+XML文件操纵:[进修xpath]XPath最普通的教程+
1usingSystem;
2usingSystem.Xml;
3usingSystem.Web;
4namespacesolucky
5{
6/**////<summary>
7///必须用XPATH表达式来猎取响应节点
8///关于xpath能够拜见:
9///</summary>
10publicclassMyXml
11{
12变量#region变量
13/**////<summary>
14///xml文件地点路径范例
15///</summary>
16///<remarks>xml文件地点路径范例</remarks>
17publicenumenumXmlPathType
18{
19/**////<summary>
20///相对路径
21///</summary>
22AbsolutePath,
23/**////<summary>
24///假造路径
25///</summary>
26VirtualPath
27}
28
29privatestringxmlFilePath;
30privateenumXmlPathTypexmlFilePathType;
31privateXmlDocumentxmlDoc=newXmlDocument();
32#endregion
33
34
35属性#region属性
36/**////<summary>
37///文件路径
38///</summary>
39///<remarks>文件路径</remarks>
40publicstringXmlFilePath
41{
42get
43{
44returnthis.xmlFilePath;
45}
46set
47{
48xmlFilePath=value;
49
50}
51}
52
53/**////<summary>
54///文件路径范例
55///</summary>
56publicenumXmlPathTypeXmlFilePathTyp
57{
58set
59{
60xmlFilePathType=value;
61}
62}
63#endregion
64
65机关函数#region机关函数
66/**////<summary>
67///
68///</summary>
69///<paramname="tempXmlFilePath"></param>
70publicMyXml(stringtempXmlFilePath)
71{
72//
73//TODO:在此处增加机关函数逻辑
74//
75
76this.xmlFilePathType=enumXmlPathType.VirtualPath;
77this.xmlFilePath=tempXmlFilePath;
78GetXmlDocument();
79//xmlDoc.Load(xmlFilePath);
80}
81
82/**////<summary>
83///机关函数
84///</summary>
85///<paramname="tempXmlFilePath">文件路径</param>
86///<paramname="tempXmlFilePathType">范例</param>
87publicMyXml(stringtempXmlFilePath,enumXmlPathTypetempXmlFilePathType)
88{
89//
90//TODO:在此处增加机关函数逻辑
91//
92this.xmlFilePathType=tempXmlFilePathType;
93this.xmlFilePath=tempXmlFilePath;
94GetXmlDocument();
95}
96#endregion
97
98
99/**////<summary>
100///猎取XmlDocument实体类
101///</summary>
102///<returns>指定的XML形貌文件的一个xmldocument实例</returns>
103privateXmlDocumentGetXmlDocument()
104{
105XmlDocumentdoc=null;
106
107if(this.xmlFilePathType==enumXmlPathType.AbsolutePath)
108{
109doc=GetXmlDocumentFromFile(xmlFilePath);
110}
111elseif(this.xmlFilePathType==enumXmlPathType.VirtualPath)
112{
113doc=GetXmlDocumentFromFile(HttpContext.Current.Server.MapPath(xmlFilePath));
114}
115returndoc;
116}
117
118privateXmlDocumentGetXmlDocumentFromFile(stringtempXmlFilePath)
119{
120stringxmlFileFullPath=tempXmlFilePath;
121xmlDoc.Load(xmlFileFullPath);
122//界说事务处置
123xmlDoc.NodeChanged+=newXmlNodeChangedEventHandler(this.nodeUpdateEvent);
124xmlDoc.NodeInserted+=newXmlNodeChangedEventHandler(this.nodeInsertEvent);
125xmlDoc.NodeRemoved+=newXmlNodeChangedEventHandler(this.nodeDeleteEvent);
126returnxmlDoc;
127}
128
129读取指定节点的指定属性值#region读取指定节点的指定属性值
130/**////<summary>
131///功效:
132///读取指定节点的指定属性值
133///</summary>
134///<paramname="strNode">节点称号</param>
135///<paramname="strAttribute">此节点的属性</param>
136///<returns></returns>
137publicstringGetXmlNodeAttributeValue(stringstrNode,stringstrAttribute)
138{
139stringstrReturn="";
140try
141{
142//依据指定路径猎取节点
143XmlNodexmlNode=xmlDoc.SelectSingleNode(strNode);
144if(!(xmlNode==null))
145{//猎取节点的属性,并轮回掏出必要的属性值
146XmlAttributeCollectionxmlAttr=xmlNode.Attributes;
147
148for(inti=0;i<xmlAttr.Count;i++)
149{
150if(xmlAttr.Item(i).Name==strAttribute)
151{
152strReturn=xmlAttr.Item(i).Value;
153break;
154}
155}
156}
157}
158catch(XmlExceptionxmle)
159{
160throwxmle;
161}
162returnstrReturn;
163}
164#endregion
165
166
167读取指定节点的值#region读取指定节点的值
168/**////<summary>
169///功效:
170///读取指定节点的值
171///</summary>
172///<paramname="strNode">节点称号</param>
173///<returns></returns>
174publicstringGetXmlNodeValue(stringstrNode)
175{
176stringstrReturn=String.Empty;
177
178try
179{
180//依据路径猎取节点
181XmlNodexmlNode=xmlDoc.SelectSingleNode(strNode);
182if(!(xmlNode==null))
183strReturn=xmlNode.InnerText;
184}
185catch(XmlExceptionxmle)
186{
187throwxmle;
188}
189returnstrReturn;
190}
191#endregion
192
193设置节点值#region设置节点值
194/**////<summary>
195///功效:
196///设置节点值
197///</summary>
198///<paramname="strNode">节点的称号</param>
199///<paramname="newValue">节点值</param>
200publicvoidSetXmlNodeValue(stringxmlNodePath,stringxmlNodeValue)
201{
202try
203{
204//能够批量为切合前提的节点举行付值
205XmlNodeListxmlNode=this.xmlDoc.SelectNodes(xmlNodePath);
206if(!(xmlNode==null))
207{
208foreach(XmlNodexninxmlNode)
209{
210xn.InnerText=xmlNodeValue;
211}
212}
213/**//*
214*依据指定路径猎取节点
215XmlNodexmlNode=xmlDoc.SelectSingleNode(xmlNodePath);
216//设置节点值
217if(!(xmlNode==null))
218xmlNode.InnerText=xmlNodeValue;*/
219}
220catch(XmlExceptionxmle)
221{
222throwxmle;
223}
224}
225#endregion
226
227设置节点的属性值#region设置节点的属性值
228/**////<summary>
229///功效:
230///设置节点的属性值
231///</summary>
232///<paramname="xmlNodePath">节点称号</param>
233///<paramname="xmlNodeAttribute">属性称号</param>
234///<paramname="xmlNodeAttributeValue">属性值</param>
235publicvoidSetXmlNodeAttributeValue(stringxmlNodePath,stringxmlNodeAttribute,stringxmlNodeAttributeValue)
236{
237try
238{
239//能够批量为切合前提的节点的属性付值
240XmlNodeListxmlNode=this.xmlDoc.SelectNodes(xmlNodePath);
241if(!(xmlNode==null))
242{
243foreach(XmlNodexninxmlNode)
244{
245XmlAttributeCollectionxmlAttr=xn.Attributes;
246for(inti=0;i<xmlAttr.Count;i++)
247{
248if(xmlAttr.Item(i).Name==xmlNodeAttribute)
249{
250xmlAttr.Item(i).Value=xmlNodeAttributeValue;
251break;
252}
253}
254}
255}
256/**//*单个节点
257//依据指定路径猎取节点
258XmlNodexmlNode=xmlDoc.SelectSingleNode(xmlNodePath);
259if(!(xmlNode==null))
260{//猎取节点的属性,并轮回掏出必要的属性值
261XmlAttributeCollectionxmlAttr=xmlNode.Attributes;
262for(inti=0;i<xmlAttr.Count;i++)
263{
264if(xmlAttr.Item(i).Name==xmlNodeAttribute)
265{
266xmlAttr.Item(i).Value=xmlNodeAttributeValue;
267break;
268}
269}
270}
271*/
272}
273catch(XmlExceptionxmle)
274{
275throwxmle;
276}
277}
278#endregion
279
280增加#region增加
281/**////<summary>
282///猎取XML文件的根元素
283///</summary>
284publicXmlNodeGetXmlRoot()
285{
286returnxmlDoc.DocumentElement;
287}
288
289/**////<summary>
290///在根节点下增加父节点
291///</summary>
292publicvoidAddParentNode(stringparentNode)
293{
294try
295{
296XmlNoderoot=GetXmlRoot();
297XmlNodeparentXmlNode=xmlDoc.CreateElement(parentNode);
298root.AppendChild(parentXmlNode);
299}
300catch(XmlExceptionxmle)
301{
302throwxmle;
303}
304}
305
306/**////<summary>
307///向一个已存在的父节点中拔出一个子节点
308///</summary>
309///<paramname="parentNodePath">父节点</param>
310///<paramname="childNodePath">字节点称号</param>
311publicvoidAddChildNode(stringparentNodePath,stringchildnodename)
312{
313try
314{
315XmlNodeparentXmlNode=xmlDoc.SelectSingleNode(parentNodePath);
316if(!((parentXmlNode)==null))//假如此节点存在
317{
318XmlNodechildXmlNode=xmlDoc.CreateElement(childnodename);
319parentXmlNode.AppendChild(childXmlNode);
320}
321else{//假如不存在就放父节点增加
322//this.GetXmlRoot().AppendChild(childXmlNode);
323}
324
325}
326catch(XmlExceptionxmle)
327{
328throwxmle;
329}
330}
331
332/**////<summary>
333///向一个节点增加属性
334///</summary>
335///<paramname="NodePath">节点路径</param>
336///<paramname="NodeAttribute">属性名</param>
337publicvoidAddAttribute(stringNodePath,stringNodeAttribute)
338{
339privateAddAttribute(NodePath,NodeAttribute,"");
340}
341/**////<summary>
342///
343///</summary>
344///<paramname="NodePath"></param>
345///<paramname="NodeAttribute"></param>
346///<paramname="NodeAttributeValue"></param>
347privatevoidprivateAddAttribute(stringNodePath,stringNodeAttribute,stringNodeAttributeValue)
348{
349try
350{
351XmlNodenodePath=xmlDoc.SelectSingleNode(NodePath);
352if(!(nodePath==null))
353{
354XmlAttributenodeAttribute=this.xmlDoc.CreateAttribute(NodeAttribute);
355nodeAttribute.Value=NodeAttributeValue;
356nodePath.Attributes.Append(nodeAttribute);
357}
358}
359catch(XmlExceptionxmle)
360{
361throwxmle;
362}
363}
364/**////<summary>
365///向一个节点增加属性,并付值
366///</summary>
367///<paramname="NodePath">节点</param>
368///<paramname="NodeAttribute">属性名</param>
369///<paramname="NodeAttributeValue">属性值</param>
370publicvoidAddAttribute(stringNodePath,stringNodeAttribute,stringNodeAttributeValue)
371{
372privateAddAttribute(NodePath,NodeAttribute,NodeAttributeValue);
373}
374#endregion
375
376删除#region删除
377/**////<summary>
378///删除节点的一个属性
379///</summary>
380///<paramname="NodePath">节点地点的xpath表达式</param>
381///<paramname="NodeAttribute">属性名</param>
382publicvoidDeleteAttribute(stringNodePath,stringNodeAttribute)
383{
384XmlNodeListnodePath=this.xmlDoc.SelectNodes(NodePath);
385if(!(nodePath==null))
386{
387foreach(XmlNodetempxninnodePath)
388{
389XmlAttributeCollectionxmlAttr=tempxn.Attributes;
390for(inti=0;i<xmlAttr.Count;i++)
391{
392if(xmlAttr.Item(i).Name==NodeAttribute)
393{
394tempxn.Attributes.RemoveAt(i);
395break;
396}
397}
398}
399}
400}
401
402/**////<summary>
403///删除节点,当其属性值即是给定的值时
404///</summary>
405///<paramname="NodePath">节点地点的xpath表达式</param>
406///<paramname="NodeAttribute">属性</param>
407///<paramname="NodeAttributeValue">值</param>
408publicvoidDeleteAttribute(stringNodePath,stringNodeAttribute,stringNodeAttributeValue)
409{
410XmlNodeListnodePath=this.xmlDoc.SelectNodes(NodePath);
411if(!(nodePath==null))
412{
413foreach(XmlNodetempxninnodePath)
414{
415XmlAttributeCollectionxmlAttr=tempxn.Attributes;
416for(inti=0;i<xmlAttr.Count;i++)
417{
418if(xmlAttr.Item(i).Name==NodeAttribute&&xmlAttr.Item(i).Value==NodeAttributeValue)
419{
420tempxn.Attributes.RemoveAt(i);
421break;
422}
423}
424}
425}
426}
427/**////<summary>
428///删除节点
429///</summary>
430///<paramname="tempXmlNode"></param>
431///<remarks></remarks>
432publicvoidDeleteXmlNode(stringtempXmlNode){
433XmlNodeListnodePath=this.xmlDoc.SelectNodes(tempXmlNode);
434if(!(nodePath==null))
435{
436foreach(XmlNodexninnodePath)
437{
438xn.ParentNode.RemoveChild(xn);
439}
440}
441}
442
443#endregion
444
445XML文档事务#regionXML文档事务
446/**////<summary>
447///
448///</summary>
449///<paramname="src"></param>
450///<paramname="args"></param>
451privatevoidnodeInsertEvent(Objectsrc,XmlNodeChangedEventArgsargs)
452{
453//保留设置
454SaveXmlDocument();
455}
456/**////<summary>
457///
458///</summary>
459///<paramname="src"></param>
460///<paramname="args"></param>
461privatevoidnodeDeleteEvent(Objectsrc,XmlNodeChangedEventArgsargs)
462{
463//保留设置
464SaveXmlDocument();
465}
466/**////<summary>
467///
468///</summary>
469///<paramname="src"></param>
470///<paramname="args"></param>
471privatevoidnodeUpdateEvent(Objectsrc,XmlNodeChangedEventArgsargs)
472{
473//保留设置
474SaveXmlDocument();
475}
476#endregion
477
478保留XML文件#region保留XML文件
479/**////<summary>
480///功效:
481///保留XML文件
482///
483///</summary>
484publicvoidSaveXmlDocument()
485{
486try
487{
488//保留设置的了局
489if(this.xmlFilePathType==enumXmlPathType.AbsolutePath)
490{
491Savexml(xmlFilePath);
492}
493elseif(this.xmlFilePathType==enumXmlPathType.VirtualPath)
494{
495Savexml(HttpContext.Current.Server.MapPath(xmlFilePath));
496}
497}
498catch(XmlExceptionxmle)
499{
500throwxmle;
501}
502}
503
504/**////<summary>
505///功效:
506///保留XML文件
507///</summary>
508publicvoidSaveXmlDocument(stringtempXMLFilePath)
509{
510try
511{
512//保留设置的了局
513Savexml(tempXMLFilePath);
514}
515catch(XmlExceptionxmle)
516{
517throwxmle;
518}
519}
520/**////<summary>
521///
522///</summary>
523///<paramname="filepath"></param>
524privatevoidSavexml(stringfilepath)
525{
526xmlDoc.Save(filepath);
527}
528
529#endregion
530
531}
532
533}
534
535
J2EE比较成熟一点,一些比较出名的企业应用软件都是基于J2EE的。以后的发展就不好说了。不过java比较烦,学.net的话,微软把很多工具都封装好了,学起来可能容易一点。 |
|