广

ASP.NET

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    .net操纵xml文件类(c#)

    2018-04-06 10:41:52 次阅读 稿源:互联网
    广告

      一直想要写一个操作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

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告