首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 冲浪宝典-> 联络聊天
.net操纵xml文件类(c#)_asp.net技巧
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

一直想要写一个操作XML文件的类,今天在网上找了一下,找到一个已写的差不多的类,对其进行扩展与修改,最终成了以下代码,供新手参考参考.
//
在此类中用到了XML事件.此类中对于节点的查找必需用xpath表达式,如果你对xpath表达式不了解可以查看我收藏的另外一篇文章:+XML文件操作:[学习xpath]XPath最通俗的教程+

  1using System;
  2using System.Xml;
  3using System.Web;
  4namespace solucky
  5{
  6    /**//// <summary>
  7    /// 必需用XPATH表达式来获取相应节点
  8    /// 关于xpath可以参见:
  9    /// </summary>
 10    public class MyXml
 11    {
 12        变量#region 变量
 13        /**//// <summary>
 14        /// xml文件所在路径类型
 15        /// </summary>
 16        /// <remarks>xml文件所在路径类型</remarks>
 17        public enum enumXmlPathType
 18        {   
 19            /**//// <summary>
 20            /// 绝对路径
 21            /// </summary>
 22            AbsolutePath,
 23            /**//// <summary>
 24            /// 虚拟路径
 25            /// </summary>
 26            VirtualPath
 27        }
 28
 29        private string xmlFilePath ;
 30        private enumXmlPathType xmlFilePathType ;
 31        private XmlDocument xmlDoc = new XmlDocument() ;
 32        #endregion
 33
 34
 35        属性#region 属性
 36        /**//// <summary>
 37        /// 文件路径
 38        /// </summary>
 39        /// <remarks>文件路径</remarks>
 40        public string XmlFilePath
 41        {
 42            get
 43            {
 44                return this.xmlFilePath;
 45            }
 46            set
 47            {
 48                xmlFilePath = value ;
 49
 50            }
 51        }
 52
 53        /**//// <summary>
 54        /// 文件路径类型
 55        /// </summary>
 56        public enumXmlPathType XmlFilePathTyp
 57        {
 58            set
 59            {
 60                xmlFilePathType = value ;
 61            }
 62        }
 63        #endregion
 64
 65        构造函数#region 构造函数
 66        /**//// <summary>
 67        ///
 68        /// </summary>
 69        /// <param name="tempXmlFilePath"></param>
 70        public MyXml( string tempXmlFilePath )
 71        {
 72            //
 73            // TODO: 在此处添加构造函数逻辑
 74            //
 75
 76            this.xmlFilePathType = enumXmlPathType.VirtualPath ;
 77            this.xmlFilePath = tempXmlFilePath ;
 78            GetXmlDocument() ;
 79            //xmlDoc.Load( xmlFilePath ) ;
 80        }
 81   
 82        /**//// <summary>
 83        /// 构造函数
 84        /// </summary>
 85        /// <param name="tempXmlFilePath">文件路径</param>
 86        /// <param name="tempXmlFilePathType">类型</param>
 87        public MyXml( string tempXmlFilePath , enumXmlPathType tempXmlFilePathType )
 88        {
 89            //
 90            // TODO: 在此处添加构造函数逻辑
 91            //
 92            this.xmlFilePathType = tempXmlFilePathType ;
 93            this.xmlFilePath = tempXmlFilePath ;
 94            GetXmlDocument() ;
 95        }
 96        #endregion
 97
 98
 99        /**////<summary>
100        ///获取XmlDocument实体类
101        ///</summary>   
102        /// <returns>指定的XML描述文件的一个xmldocument实例</returns>
103        private XmlDocument GetXmlDocument()
104        {
105            XmlDocument doc=null;
106
107            if( this.xmlFilePathType == enumXmlPathType.AbsolutePath )
108            {
109                doc = GetXmlDocumentFromFile( xmlFilePath ) ;
110            }
111            else if( this.xmlFilePathType == enumXmlPathType.VirtualPath )
112            {
113                doc = GetXmlDocumentFromFile(HttpContext.Current.Server.MapPath(xmlFilePath)) ;
114            }
115            return doc;
116        }
117
118        private XmlDocument GetXmlDocumentFromFile(string tempXmlFilePath)
119        {
120            string xmlFileFullPath = tempXmlFilePath ;
121            xmlDoc.Load(xmlFileFullPath) ;
122            //定义事件处理
123            xmlDoc.NodeChanged += new XmlNodeChangedEventHandler(this.nodeUpdateEvent);
124            xmlDoc.NodeInserted += new XmlNodeChangedEventHandler(this.nodeInsertEvent);
125            xmlDoc.NodeRemoved += new XmlNodeChangedEventHandler(this.nodeDeleteEvent);
126            return xmlDoc ;
127        }
128
129        读取指定节点的指定属性值#region 读取指定节点的指定属性值
130        /**//// <summary>
131        /// 功能:
132        /// 读取指定节点的指定属性值   
133        /// </summary>
134        /// <param name="strNode">节点名称</param>
135        /// <param name="strAttribute">此节点的属性</param>
136        /// <returns></returns>
137        public string GetXmlNodeAttributeValue(string strNode,string strAttribute)
138        {
139            string strReturn = "";
140            try
141            {
142                //根据指定路径获取节点
143                XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode) ;
144                if (!(xmlNode==null))
145                {//获取节点的属性,并循环取出需要的属性值
146                    XmlAttributeCollection xmlAttr = xmlNode.Attributes ;
147
148                    for(int i=0 ;i<xmlAttr.Count; i++)
149                    {
150                        if (xmlAttr.Item(i).Name == strAttribute)
151                        {
152                            strReturn = xmlAttr.Item(i).Value ;
153                            break;
154                        }
155                    }
156                }
157            }
158            catch(XmlException xmle)
159            {
160                throw xmle ;
161            }
162            return strReturn ;
163        }
164        #endregion
165
166
167        读取指定节点的值#region 读取指定节点的值
168        /**//// <summary>
169        /// 功能:
170        /// 读取指定节点的值   
171        /// </summary>
172        /// <param name="strNode">节点名称</param>
173        /// <returns></returns>
174        public string GetXmlNodeValue(string strNode)
175        {
176            string strReturn = String.Empty ;
177
178            try
179            {
180                //根据路径获取节点
181                XmlNode xmlNode = xmlDoc.SelectSingleNode(strNode) ;
182                if (!(xmlNode==null))
183                    strReturn = xmlNode.InnerText ;
184            }
185            catch(XmlException xmle)
186            {
187                throw xmle ;
188            }
189            return strReturn ;
190        }
191        #endregion
192
193        设置节点值#region 设置节点值
194        /**//// <summary>
195        /// 功能:
196        /// 设置节点值       
197        /// </summary>
198        /// <param name="strNode">节点的名称</param>
199        /// <param name="newValue">节点值</param>
200        public void SetXmlNodeValue(string xmlNodePath,string xmlNodeValue)
201        {
202            try
203            {
204                //可以批量为符合条件的节点进行付值
205                XmlNodeList xmlNode=this.xmlDoc.SelectNodes(xmlNodePath);
206                if (!(xmlNode==null))
207                {
208                    foreach(XmlNode xn in xmlNode)
209                    {
210                        xn.InnerText = xmlNodeValue ;   
211                    }
212                }
213                /**//*
214                 * 根据指定路径获取节点
215                XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ;           
216                //设置节点值
217                if (!(xmlNode==null))
218                    xmlNode.InnerText = xmlNodeValue ;*/               
219            }
220            catch(XmlException xmle)
221            {
222                throw xmle ;
223            }
224        }
225        #endregion
226
227        设置节点的属性值#region 设置节点的属性值
228        /**//// <summary>
229        /// 功能:
230        /// 设置节点的属性值   
231        /// </summary>
232        /// <param name="xmlNodePath">节点名称</param>
233        /// <param name="xmlNodeAttribute">属性名称</param>
234        /// <param name="xmlNodeAttributeValue">属性值</param>
235        public void SetXmlNodeAttributeValue(string xmlNodePath,string xmlNodeAttribute,string xmlNodeAttributeValue)
236        {
237            try
238            {
239                //可以批量为符合条件的节点的属性付值
240                XmlNodeList xmlNode=this.xmlDoc.SelectNodes(xmlNodePath);
241                if (!(xmlNode==null))
242                {
243                    foreach(XmlNode xn in xmlNode)
244                    {
245                        XmlAttributeCollection xmlAttr = xn.Attributes ;
246                        for(int i=0 ; i<xmlAttr.Count ; i++)
247                        {
248                            if ( xmlAttr.Item(i).Name == xmlNodeAttribute )
249                            {
250                                xmlAttr.Item(i).Value = xmlNodeAttributeValue;
251                                break ;
252                            }
253                        }   
254                    }
255                }
256                /**//*单个节点
257                //根据指定路径获取节点
258                XmlNode xmlNode = xmlDoc.SelectSingleNode(xmlNodePath) ;
259                if (!(xmlNode==null))
260                {//获取节点的属性,并循环取出需要的属性值
261                    XmlAttributeCollection xmlAttr = xmlNode.Attributes ;
262                    for(int i=0 ; i<xmlAttr.Count ; i++)
263                    {
264                        if ( xmlAttr.Item(i).Name == xmlNodeAttribute )
265                        {
266                            xmlAttr.Item(i).Value = xmlNodeAttributeValue;
267                            break ;
268                        }
269                    }   
270                }
271                */
272            }
273            catch(XmlException xmle)
274            {
275                throw xmle ;
276            }
277        }
278        #endregion
279
280        添加#region 添加
281        /**//// <summary>
282        /// 获取XML文件的根元素
283        /// </summary>
284        public XmlNode GetXmlRoot()
285        {
286            return xmlDoc.DocumentElement ;
287        }
288
289        /**//// <summary>
290        /// 在根节点下添加父节点
291        /// </summary>
292        public void AddParentNode(string parentNode)
293        {
294            try
295            {
296                XmlNode root = GetXmlRoot() ;
297                XmlNode parentXmlNode = xmlDoc.CreateElement(parentNode) ;
298                root.AppendChild(parentXmlNode) ;               
299            }
300            catch(XmlException xmle)
301            {
302                throw xmle ;
303            }
304        }
305       
306        /**//// <summary>
307        /// 向一个已经存在的父节点中插入一个子节点
308        /// </summary>
309        /// <param name="parentNodePath">父节点</param>
310        /// <param name="childNodePath">字节点名称</param>
311        public void AddChildNode( string parentNodePath,string childnodename )
312        {
313            try
314            {
315                XmlNode parentXmlNode = xmlDoc.SelectSingleNode(parentNodePath) ;               
316                if(!((parentXmlNode)==null))//如果此节点存在
317                {   
318                    XmlNode childXmlNode =  xmlDoc.CreateElement(childnodename) ;               
319                    parentXmlNode.AppendChild( childXmlNode ) ;   
320                }
321                else{//如果不存在就放父节点添加
322                    //this.GetXmlRoot().AppendChild(childXmlNode);
323                }
324                           
325            }
326            catch(XmlException xmle)
327            {
328                throw xmle;
329            }
330        }
331       
332        /**//// <summary>
333        /// 向一个节点添加属性
334        /// </summary>
335        /// <param name="NodePath">节点路径</param>
336        /// <param name="NodeAttribute">属性名</param>
337        public void AddAttribute( string NodePath , string NodeAttribute)
338        {
339            privateAddAttribute(NodePath,NodeAttribute,"");
340        }
341        /**//// <summary>
342        ///
343        /// </summary>
344        /// <param name="NodePath"></param>
345        /// <param name="NodeAttribute"></param>
346        /// <param name="NodeAttributeValue"></param>
347        private void privateAddAttribute( string NodePath , string NodeAttribute,string NodeAttributeValue)
348        {
349            try
350            {
351                XmlNode nodePath = xmlDoc.SelectSingleNode( NodePath ) ;
352                if (!(nodePath==null))
353                {   
354                    XmlAttribute nodeAttribute = this.xmlDoc.CreateAttribute(NodeAttribute);
355                    nodeAttribute.Value=NodeAttributeValue;
356                    nodePath.Attributes.Append(nodeAttribute) ;                       
357                }
358            }
359            catch(XmlException xmle)
360            {
361                throw xmle;
362            }
363        }
364        /**//// <summary>
365        ///  向一个节点添加属性,并付值
366        /// </summary>
367        /// <param name="NodePath">节点</param>
368        /// <param name="NodeAttribute">属性名</param>
369        /// <param name="NodeAttributeValue">属性值</param>
370        public void AddAttribute( string NodePath , string NodeAttribute,string NodeAttributeValue)
371        {
372            privateAddAttribute(NodePath,NodeAttribute,NodeAttributeValue);
373        }
374        #endregion
375
376        删除#region 删除
377        /**//// <summary>
378        /// 删除节点的一个属性
379        /// </summary>
380        /// <param name="NodePath">节点所在的xpath表达式</param>
381        /// <param name="NodeAttribute">属性名</param>
382        public void DeleteAttribute( string NodePath , string NodeAttribute)
383        {           
384            XmlNodeList nodePath =this.xmlDoc.SelectNodes(NodePath);           
385            if (!(nodePath==null))
386            {
387                foreach (XmlNode tempxn in nodePath)
388                {
389                    XmlAttributeCollection xmlAttr = tempxn.Attributes ;
390                    for(int i=0 ; i<xmlAttr.Count ; i++)
391                    {
392                        if ( xmlAttr.Item(i).Name == NodeAttribute)
393                        {
394                            tempxn.Attributes.RemoveAt(i);
395                            break ;
396                        }
397                    }
398                }
399            }
400        }
401       
402        /**//// <summary>
403        /// 删除节点,当其属性值等于给定的值时
404        /// </summary>
405        /// <param name="NodePath">节点所在的xpath表达式</param>
406        /// <param name="NodeAttribute">属性</param>
407        /// <param name="NodeAttributeValue">值</param>
408        public void DeleteAttribute( string NodePath , string NodeAttribute , string NodeAttributeValue)
409        {
410            XmlNodeList nodePath =this.xmlDoc.SelectNodes(NodePath);           
411            if (!(nodePath==null))
412            {
413                foreach (XmlNode tempxn in nodePath)
414                {
415                    XmlAttributeCollection xmlAttr = tempxn.Attributes ;
416                    for(int i=0 ; i<xmlAttr.Count ; i++)
417                    {
418                        if ( xmlAttr.Item(i).Name == NodeAttribute && xmlAttr.Item(i).Value==NodeAttributeValue)
419                        {
420                            tempxn.Attributes.RemoveAt(i);
421                            break ;
422                        }
423                    }
424                }
425            }
426        }
427        /**//// <summary>
428        /// 删除节点
429        /// </summary>
430        /// <param name="tempXmlNode"></param>
431        /// <remarks></remarks>
432        public void DeleteXmlNode(string tempXmlNode){   
433            XmlNodeList nodePath =this.xmlDoc.SelectNodes(tempXmlNode);
434            if (!(nodePath==null))
435            {
436                foreach(XmlNode xn in nodePath)
437                {
438                    xn.ParentNode.RemoveChild(xn);       
439                }
440            }
441        }
442
443        #endregion
444
445        XML文档事件#region XML文档事件
446        /**//// <summary>
447        ///
448        /// </summary>
449        /// <param name="src"></param>
450        /// <param name="args"></param>
451        private  void nodeInsertEvent(Object src, XmlNodeChangedEventArgs args)
452        {
453            //保存设置
454            SaveXmlDocument();
455        }
456        /**//// <summary>
457        ///
458        /// </summary>
459        /// <param name="src"></param>
460        /// <param name="args"></param>
461        private  void nodeDeleteEvent(Object src, XmlNodeChangedEventArgs args)
462        {
463            //保存设置
464            SaveXmlDocument();
465        }
466        /**//// <summary>
467        ///
468        /// </summary>
469        /// <param name="src"></param>
470        /// <param name="args"></param>
471        private  void nodeUpdateEvent(Object src, XmlNodeChangedEventArgs args)
472        {
473            //保存设置
474            SaveXmlDocument();
475        }
476        #endregion
477
478        保存XML文件#region 保存XML文件
479        /**//// <summary>
480        /// 功能:
481        /// 保存XML文件
482        ///
483        /// </summary>
484        public void SaveXmlDocument()
485        {
486            try
487            {
488                //保存设置的结果
489                if( this.xmlFilePathType == enumXmlPathType.AbsolutePath )
490                {
491                    Savexml( xmlFilePath ) ;
492                }
493                else if( this.xmlFilePathType == enumXmlPathType.VirtualPath )
494                {
495                    Savexml(HttpContext.Current.Server.MapPath(xmlFilePath)) ;
496                }
497            }
498            catch(XmlException xmle)
499            {
500                throw xmle;
501            }
502        }
503   
504        /**//// <summary>
505        /// 功能:
506        /// 保存XML文件   
507        /// </summary>
508        public void SaveXmlDocument(string tempXMLFilePath)
509        {
510            try
511            {
512                //保存设置的结果
513                Savexml(tempXMLFilePath);
514            }
515            catch(XmlException xmle)
516            {
517                throw xmle;
518            }
519        }
520        /**//// <summary>
521        ///
522        /// </summary>
523        /// <param name="filepath"></param>
524        private void Savexml(string filepath)
525        {
526            xmlDoc.Save(filepath);
527        }
528
529        #endregion
530
531    }
532
533}
534
535


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·Java Unicode转义字符的小小研究-JSP教程,Java技巧及代码
·实现VB与EXCEL的无缝连接-.NET教程,VB.Net语言
·在ASP.NET里通过URL传递参数得到乱码的解决方法-ASP教程,ASP应用
·实例讲解:Java中的SOAP技术-JSP教程,Java技巧及代码
·Session过期问题-ASP教程,ASP应用
·设计模式笔记-抽象工厂模式-.NET教程,评论及其它
·JSP标准标记库促进了网页的开发-JSP教程,Jsp/Servlet
·在Remoting Server上取得Remoting Client的IP地址-ASP教程,ASP应用
·使用JSP标记库校验用户输入-JSP教程,Jsp/Servlet
·c#中DataGrid的数据新增编辑删除操作代码-.NET教程,数据库应用
最新文章
·xp也能享受vista readyboost闪存加速_windows xp
·c# 3.0新特性系列:隐含类型var_c#教程
·如此做google广告,月赚10万美金不成问题_网赚技巧
·王通:个人博客的赚钱之道_网赚技巧
·这一年来风风雨雨-再访中客宋陈磊_站长访谈
·个人网站的定位推广和赚钱-访中国建站站长_站长访谈
·祥瑞网方文春:从800元到6000万元_站长访谈
·行业类、专业性成功网站给个人站长的启示_站长访谈
·网站推广 新招老招齐用上_站长心得
·widnows vista工具栏添加快速启动tabletpc图标_windows vista
相关主题
  • .net操纵xml文件类(c#)-.NET教程,C#语言
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭