xml 文件操作类

it2025-10-24  4

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

转载于:https://www.cnblogs.com/zhahost/archive/2009/03/26/1422104.html

最新回复(0)