XML 操作类

 public  class XMLHelp:Object
    { 
        protected string strXmlFile;
        protected XmlDocument objXmlDoc = new XmlDocument();
        /// <summary>
        /// xml文档根节点.
        /// </summary>
        private XmlElement _element;

        public XMLHelp(string XmlFile, Boolean bOverWrite, string sRoot)
        {
            try
            {
                //如果覆盖模式,则强行创建一个xml文档
                if (bOverWrite)
                {
                    objXmlDoc.AppendChild(objXmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));//设置xml的版本,格式信息
                    objXmlDoc.AppendChild(objXmlDoc.CreateElement("", sRoot, ""));//创建根元素
                    objXmlDoc.Save(XmlFile);//保存
                }
                else //否则,检查文件是否存在,不存在则创建
                {
                    if (!(File.Exists(XmlFile)))
                    {
                        objXmlDoc.AppendChild(objXmlDoc.CreateXmlDeclaration("1.0", "utf-8", null));
                        objXmlDoc.AppendChild(objXmlDoc.CreateElement("", sRoot, ""));
                        objXmlDoc.Save(XmlFile);
                    }
                }
                objXmlDoc.Load(XmlFile);
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            strXmlFile = XmlFile;
        }



        /// <summary>
        /// 根据xPath值,返回xPath下的所有下级子结节到一个DataView
        /// </summary>
        /// <param name="XmlPathNode">xPath值</param>
        /// <returns>有数据则返回DataView,否则返回null</returns>
        public DataView GetData(string XmlPathNode)
        {
            //查找数据。返回一个DataView
            DataSet ds = new DataSet();
            try
            {
                StringReader read = new StringReader(objXmlDoc.SelectSingleNode(XmlPathNode).OuterXml);
                ds.ReadXml(read);
                return ds.Tables[0].DefaultView;
            }
            catch
            {
                //throw;
                return null;
            }
        }

        /// <summary>
        /// 更新节点内容
        /// </summary>
        /// <param name="xmlPathNode"></param>
        /// <param name="content"></param>
        public void UpdateNode(string xmlPathNode, string content)
        {
            objXmlDoc.SelectSingleNode(xmlPathNode).InnerText = content;
        }

        /// <summary>
        /// 更新节点的某个属性
        /// </summary>
        /// <param name="xmlPathNode">要操作的节点</param>
        /// <param name="AttribName">属性名</param>
        /// <param name="AttribValue">属性值</param>
        public void UpdateNode(string xmlPathNode, string AttribName, string AttribValue)
        {

            ((XmlElement)(objXmlDoc.SelectSingleNode(xmlPathNode))).SetAttribute(AttribName, AttribValue);
        }


        /// <summary>
        /// 修改节点(同步更新内容和属性)
        /// </summary>
        /// <param name="xmlPathNode">要操作节点的xpath语句</param>
        /// <param name="arrAttribName">属性名称字符串数组</param>
        /// <param name="arrAttribContent">属性内容字符串数组</param>
        /// <param name="content">节点内容</param>
        public void UpdateNode(string xmlPathNode, string[] arrAttribName, string[] arrAttribContent, string content)
        {

            XmlNode xn = objXmlDoc.SelectSingleNode(xmlPathNode);
            if (xn != null)
            {
                xn.InnerText = content;
                xn.Attributes.RemoveAll();
                for (int i = 0; i <= arrAttribName.GetUpperBound(0); i++)
                {
                    ((XmlElement)(xn)).SetAttribute(arrAttribName[i], arrAttribContent[i]);
                }

            }
        }

        /// <summary>
        /// 移除选定节点集的所有属性
        /// </summary>
        /// <param name="xmlPathNode"></param>
        public void RemoveAllAttribute(string xmlPathNode)
        {
            XmlNodeList xnl = objXmlDoc.SelectNodes(xmlPathNode);
            foreach (XmlNode xn in xnl)
            {
                xn.Attributes.RemoveAll();
            }
        }


        public void DeleteNode(string Node)
        {
            //刪除一个节点。
            try
            {
                string mainNode = Node.Substring(0, Node.LastIndexOf("/"));
                objXmlDoc.SelectSingleNode(mainNode).RemoveChild(objXmlDoc.SelectSingleNode(Node));
            }
            catch
            {
                //throw;   
                return;
            }
        }


        public void InsertNodeWithChild(string mainNode, string ChildNode, string Element, string Content)
        {
            //插入一节点和此节点的一子节点。
            XmlNode objRootNode = objXmlDoc.SelectSingleNode(mainNode);
            XmlElement objChildNode = objXmlDoc.CreateElement(ChildNode);
            objRootNode.AppendChild(objChildNode);//插入节点
            XmlElement objElement = objXmlDoc.CreateElement(Element);
            objElement.InnerText = Content;
            objChildNode.AppendChild(objElement);//插入子节点
        }

        /// <summary>
        /// 插入一个节点,带一个Attribute和innerText
        /// </summary>
        /// <param name="mainNode"></param>
        /// <param name="Element">节点名称</param>
        /// <param name="Attrib">Attribute名称</param>
        /// <param name="AttribContent">Attribute值</param>
        /// <param name="Content">innerText值</param>
        public void InsertNode(string mainNode, string Element, string Attrib, string AttribContent, string Content)
        {
            XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
            XmlElement objElement = objXmlDoc.CreateElement(Element);
            objElement.SetAttribute(Attrib, AttribContent);
            objElement.InnerText = Content;
            objNode.AppendChild(objElement);
        }

        /// <summary>
        /// 插入一个节点,带一个Attribute
        /// </summary>
        /// <param name="mainNode"></param>
        /// <param name="Element">节点名称</param>
        /// <param name="Attrib">Attribute名称</param>
        /// <param name="AttribContent">Attribute值</param>   
        public void InsertNode(string mainNode, string Element, string Attrib, string AttribContent)
        {
            XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
            XmlElement objElement = objXmlDoc.CreateElement(Element);
            objElement.SetAttribute(Attrib, AttribContent);
            objNode.AppendChild(objElement);
        }


        /// <summary>
        /// 插入一个节点
        /// </summary>
        /// <param name="mainNode"></param>
        /// <param name="Element">节点名称</param>       
        public void InsertNode(string mainNode, string Element)
        {
            XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
            XmlElement objElement = objXmlDoc.CreateElement(Element);
            objNode.AppendChild(objElement);
        }


        //<summary>
        //插入一个节点,带多个属性和一个inner text
        //</summary>
        public void InsertNode(string mainNode, string elementName, string[] arrAttributeName, string[] arrAttributeContent, string elementContent)
        {
            try
            {
                XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
                XmlElement objElement = objXmlDoc.CreateElement(elementName);
                for (int i = 0; i <= arrAttributeName.GetUpperBound(0); i++)
                {
                    objElement.SetAttribute(arrAttributeName[i], arrAttributeContent[i]);
                }
                objElement.InnerText = elementContent;
                objNode.AppendChild(objElement);
            }
            catch
            {
                throw;
                //string t = mainNode;
                //;
            }
        }

        ///<summary>
        ///插入一个节点,带多个属性
        ///</summary>
        public void InsertNode(string mainNode, string elementName, string[] arrAttributeName, string[] arrAttributeContent)
        {
            try
            {
                XmlNode objNode = objXmlDoc.SelectSingleNode(mainNode);
                XmlElement objElement = objXmlDoc.CreateElement(elementName);
                for (int i = 0; i <= arrAttributeName.GetUpperBound(0); i++)
                {
                    objElement.SetAttribute(arrAttributeName[i], arrAttributeContent[i]);
                }
                //objElement.InnerText = elementContent;
                objNode.AppendChild(objElement);
            }
            catch
            {
                throw;
                //string t = mainNode;
                //;
            }
        }

        /// <summary>
        /// 插入子节点(带多个属性)
        /// </summary>
        /// <param name="parentNode">要插入的父节点</param>
        /// <param name="elementName">插入的节点名称</param>
        /// <param name="arrAttributeName">属性名称[数组]</param>
        /// <param name="arrAttributeContent">属性内容[数组]</param>
        /// <param name="elementContent">节点内容</param>
        public void AddChildNode(string parentNodePath, string elementName, string[] arrAttributeName, string[] arrAttributeContent, string elementContent)
        {
            try
            {
                XmlNode parentNode = objXmlDoc.SelectSingleNode(parentNodePath);
                XmlElement objChildElement = objXmlDoc.CreateElement(elementName);
                for (int i = 0; i <= arrAttributeName.GetUpperBound(0); i++)
                {
                    objChildElement.SetAttribute(arrAttributeName[i], arrAttributeContent[i]);
                }
                objChildElement.InnerText = elementContent;
                parentNode.AppendChild(objChildElement);
            }
            catch
            {
                return;
            }

        }

        /// <summary>
        /// 插入子节点(将内容以CData形式写入)
        /// </summary>
        /// <param name="parentNode">要插入的父节点</param>
        /// <param name="elementName">插入的节点名称</param>
        /// <param name="elementContent">节点内容</param>
        public void AddChildNodeCData(string parentNodePath, string elementName, string elementContent)
        {
            try
            {
                XmlNode parentNode = objXmlDoc.SelectSingleNode(parentNodePath);
                XmlElement objChildElement = objXmlDoc.CreateElement(elementName);

                //写入cData数据
                XmlCDataSection xcds = objXmlDoc.CreateCDataSection(elementContent);

                objChildElement.AppendChild(xcds);
                parentNode.AppendChild(objChildElement);
            }
            catch
            {
                return;
            }

        }


        /// <summary>
        /// 插入子节点(仅内容,不带属性)
        /// </summary>
        /// <param name="parentNode">要插入的父节点</param>
        /// <param name="elementName">插入的节点名称</param>
        /// <param name="elementContent">节点内容</param>
        public void AddChildNode(string parentNodePath, string elementName, string elementContent)
        {
            try
            {
                XmlNode parentNode = objXmlDoc.SelectSingleNode(parentNodePath);
                XmlElement objChildElement = objXmlDoc.CreateElement(elementName);

                objChildElement.InnerText = elementContent;
                parentNode.AppendChild(objChildElement);
            }
            catch
            {
                return;
            }

        }

        /// <summary>
        /// 根据xpath值查找节点
        /// </summary>
        /// <param name="NodePath">要查找节点的xpath值</param>
        /// <returns>找到返回true,否则返回true</returns>
        public bool FindNode(string NodePath)
        {
            try
            {
                if (objXmlDoc.SelectSingleNode(NodePath) != null)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }


        /// <summary>
        ///保存文档
        /// </summary>
        public void Save()
        {
            //保存文档。
            try
            {
                objXmlDoc.Save(strXmlFile);
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            objXmlDoc = null;
        }
        ///// <summary>

        ///// 获取指定路径节点下孩子节点列表

        ///// </summary>

        ///// <param name="xmlFileName"></param>
        ///// <param name="xPath"></param>
        ///// <returns></returns>
        //public  XmlNodeList GetXmlNodeList(string xPath)
        //{
        //    XmlDocument xmldocument = new XmlDocument();
        //    //加载xml文档
        //    xmldocument.Load(strXmlFile);
        //    try
        //    {
        //        XmlNodeList xmlnodelist = xmldocument.SelectNodes(xPath);
        //        return xmlnodelist;
        //    }
        //    catch
        //    {
        //        return null;
        //    }
        //}
        /// <summary>  
        /// 获取指定目录下所有子节点的值  
        /// </summary>  
        /// <param name="nodeDir">节点目录</param>  
        /// <returns></returns>  
        public XmlNodeList GetXmlNodeList(string nodeDir)
        {
            List<XmlNode> lstNode = new List<XmlNode>();
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(strXmlFile);
                //XmlNodeList nodeList = xmlDoc.SelectSingleNode(nodeDir).ChildNodes;//获取bookstore节点的所有子节点   
                return xmlDoc.SelectSingleNode(nodeDir).ChildNodes;
                //foreach (XmlNode xn in nodeList)     //遍历所有子节点   
                //{
                //    lstNode.Add(xn);
                //}
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>  
        /// 获取指定目录下所有子节点的值  
        /// </summary>  
        /// <param name="nodeDir">节点目录</param>  
        /// <returns></returns>  
        public Hashtable GetNodeList(string nodeDir)
        {
            Hashtable strNodeList = new Hashtable();
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(strXmlFile);
                XmlNodeList nodeList = xmlDoc.SelectSingleNode(nodeDir).ChildNodes;//获取bookstore节点的所有子节点   
                foreach (XmlNode xn in nodeList)     //遍历所有子节点   
                {
                    XmlElement xe = (XmlElement)xn;  //将子节点类型转换为XmlElement类型  
                    if (xe.GetAttribute("Name").ToString().Trim().Length > 0)
                        strNodeList.Add(xe.GetAttribute("Name").ToString(), xe.InnerText.Trim());
                    else
                        strNodeList.Add(xe.Name.Trim(), xe.InnerText.Trim());
                }
            }
            catch (Exception)
            {
                throw;
            }
            return strNodeList;
        }
        /// <summary>  
        /// 获取指定目录下所有子节点的值  
        /// </summary>  
        /// <param name="nodeDir">节点目录</param>  
        /// <returns></returns>  
        public Hashtable GetNodeListByValue(string nodeDir)
        {
            Hashtable strNodeList = new Hashtable();
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(strXmlFile);
                XmlNodeList nodeList = xmlDoc.SelectSingleNode(nodeDir).ChildNodes;//获取bookstore节点的所有子节点   
                foreach (XmlNode xn in nodeList)     //遍历所有子节点   
                {
                    XmlElement xe = (XmlElement)xn;  //将子节点类型转换为XmlElement类型   
                    if (xe.InnerText.Trim().Length > 0 && xe.Name.Length > 0) strNodeList.Add(xe.InnerText.Trim(), xe.Name);
                }
            }
            catch (Exception)
            {
                throw;
            }
            return strNodeList;
        }

        /// <summary>  
        /// 获取指定目录下所有子节点的值  
        /// </summary>  
        /// <param name="nodeDir">节点目录</param>  
        /// <returns></returns>  
        public Dictionary<string, string> GetNodeListByValueToDictionary(string nodeDir)
        {
            Dictionary<string, string> strNodeList = new Dictionary<string, string>();
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(strXmlFile);
                XmlNodeList nodeList = xmlDoc.SelectSingleNode(nodeDir).ChildNodes;//获取bookstore节点的所有子节点   
                foreach (XmlNode xn in nodeList)     //遍历所有子节点   
                {
                    XmlElement xe = (XmlElement)xn;  //将子节点类型转换为XmlElement类型   
                    if (xe.InnerText.Trim().Length > 0 && xe.Name.Length > 0) strNodeList.Add(xe.InnerText.Trim(), xe.Name);
                }
            }
            catch (Exception)
            {
                throw;
            }
            return strNodeList;
        }
        /// <summary>  
        /// 获取指定节点的值  
        /// </summary>  
        /// <param name="nodeName">节点名称</param>  
        /// <param name="value">设置后的值</param>  
        /// <param name="nodeDir">指定节点所在的节点目录</param>  
        /// <returns></returns>  
        public string GetNodeValue(string nodeName, string nodeDir)
        {
            string value = null;
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(strXmlFile);


                //XmlNodeList nodeList = xmlDoc.SelectSingleNode(nodeDir).ChildNodes;//获取bookstore节点的所有子节点   
                XmlNodeList nodeList = xmlDoc.SelectNodes(nodeDir);//获取bookstore节点的所有子节点   

                foreach (XmlNode xn in nodeList)    //遍历所有子节点   
                {
                    XmlElement xe = (XmlElement)xn;  //将子节点类型转换为XmlElement类型   


                    if (xe.Name == nodeName)
                    {
                        value = xe.InnerText.Trim();


                        break;
                    }
                }
            }
            catch (Exception exp)
            {
                throw exp;
            }


            return value;
        }


        /// <summary>  
        /// 获取指定节点下面对应属性的值  
        /// </summary>  
        /// <param name="nodeName">节点名称</param>  
        /// <param name="nodeDir">指定节点所在的节点目录</param>  
        /// <param name="attribute">节点对应的属性名称</param>  
        /// <returns></returns>  
        public string GetNodeValue(string nodeName, string nodeDir, string attribute)
        {
            string value = null;
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(strXmlFile);
                XmlNodeList nodeList = xmlDoc.SelectSingleNode(nodeDir).ChildNodes;//获取bookstore节点的所有子节点   
                foreach (XmlNode xn in nodeList)    //遍历所有子节点   
                {
                    XmlElement xe = (XmlElement)xn;  //将子节点类型转换为XmlElement类型   


                    if (xe.Name == nodeName)
                    {
                        //value = xe.InnerText.Trim();  
                        value = (xe).Attributes[attribute].Value;
                        break;
                    }
                }
            }
            catch (Exception exp)
            {
                throw exp;
            }


            return value;
        }
        /// <summary>

        /// 获取指定路径节点

        /// </summary>

        /// <param name="xPath"></param>

        /// <returns></returns>

        public static XmlNode GetXmlNode(string xmlFileName, string xPath)
        {

            XmlDocument xmldocument = new XmlDocument();

            //加载xml文档

            xmldocument.Load(xmlFileName);

            try
            {

                XmlNode xmlnode = xmldocument.SelectSingleNode(xPath);

                return xmlnode;

            }

            catch
            {

                return null;

            }

        }



        /// <summary>

        /// 获取指定路径节点下孩子节点列表

        /// </summary>

        /// <param name="xmlFileName"></param>

        /// <param name="xPath"></param>

        /// <returns></returns>

        public static XmlNodeList GetXmlNodeList(string xmlFileName, string xPath)
        {

            XmlDocument xmldocument = new XmlDocument();

            //加载xml文档

            xmldocument.Load(xmlFileName);

            try
            {

                XmlNodeList xmlnodelist = xmldocument.SelectNodes(xPath);

                return xmlnodelist;

            }

            catch
            {

                return null;

            }

        }



        /// <summary>

        /// 获取指定路径节点的属性与指定属性名匹配

        /// </summary>

        /// <param name="xmlFileName"></param>

        /// <param name="xPath">要匹配的XPath表达式(例如:"//节点名//子节点名</param>

        /// <param name="attributeName">指定的属性名称</param>

        /// <returns></returns>

        public static XmlAttribute GetXmlAttribute(string xmlFileName, string xPath, string attributeName)
        {

            XmlAttribute xmlattribute = null;

            XmlDocument xmldocument = new XmlDocument();

            xmldocument.Load(xmlFileName);

            try
            {

                XmlNode xmlnode = xmldocument.SelectSingleNode(xPath);

                if (xmlnode != null)
                {

                    if (xmlnode.Attributes.Count > 0)
                    {

                        xmlattribute = xmlnode.Attributes[attributeName];

                    }

                }

            }

            catch (Exception err)
            {

                throw err;

            }

            return xmlattribute;

        }



        /// <summary>

        /// 获取指定节点的属性集合

        /// </summary>

        /// <param name="xmlFileName"></param>

        /// <param name="xPath"></param>

        /// <returns></returns>

        public static XmlAttributeCollection GetNodeAttributes(string xmlFileName, string xPath)
        {

            XmlAttributeCollection xmlattributes = null;

            XmlDocument xmldocument = new XmlDocument();

            xmldocument.Load(xmlFileName);

            try
            {

                XmlNode xmlnode = xmldocument.SelectSingleNode(xPath);

                if (xmlnode != null)
                {

                    if (xmlnode.Attributes.Count > 0)
                    {

                        xmlattributes = xmlnode.Attributes;



                    }

                }

            }

            catch (Exception err)
            {

                throw err;

            }

            return xmlattributes;

        }



        /// <summary>

        /// 更新指定节点的某一属性设定其属性值value

        /// </summary>

        /// <param name="xmlFileName">xml文档路径</param>

        /// <param name="xPath"></param>

        /// <param name="attributeOldeName">旧属性名称</param>

        /// <param name="attributeNewName">新属性名称</param>

        /// <param name="value">属性值</param>

        /// <returns>成功返回true,失败返回false</returns>

        public static bool UpdateAttribute(string xmlFileName, string xPath, string attributeName, string value)
        {

            bool isSuccess = false;

            XmlDocument xmldocument = new XmlDocument();

            xmldocument.Load(xmlFileName);

            try
            {

                XmlNode xmlnode = xmldocument.SelectSingleNode(xPath);

                if (xmlnode != null)
                {

                    foreach (XmlAttribute attribute in xmlnode.Attributes)
                    {

                        if (attribute.Name.ToString().ToLower() == attributeName.ToLower())
                        {

                            isSuccess = true;

                            attribute.Value = value;

                            xmldocument.Save(xmlFileName);

                            break;

                        }

                    }

                }

            }

            catch (Exception err)
            {

                throw err;

            }

            return isSuccess;

        }



        /// <summary>

        /// 删除指定节点的所有属性

        /// </summary>

        /// <param name="xmlFileName"></param>

        /// <param name="xPath"></param>

        /// <returns>成功返回true,失败返回false</returns>

        public static bool DeleteAttributes(string xmlFileName, string xPath)
        {

            bool isSuccess = false;

            XmlDocument xmldocument = new XmlDocument();

            xmldocument.Load(xmlFileName);

            try
            {

                XmlNode xmlnode = xmldocument.SelectSingleNode(xPath);

                if (xmlnode != null)
                {

                    if (xmlnode.Attributes.Count > 0)
                    {

                        xmlnode.Attributes.RemoveAll();

                        xmldocument.Save(xmlFileName);

                        isSuccess = true;

                    }

                }

            }

            catch (Exception err)
            {

                throw err;

            }

            return isSuccess;

        }



        /// <summary>

        /// 删除匹配属性名称的指定节点的属性

        /// </summary>

        /// <param name="xmlFileName"></param>

        /// <param name="xPath"></param>

        /// <param name="attributeName"></param>

        /// <returns></returns>

        public static bool DeleteOneAttribute(string xmlFileName, string xPath, string attributeName)
        {

            bool isSuccess = false;

            XmlDocument xmldocument = new XmlDocument();

            xmldocument.Load(xmlFileName);

            XmlAttribute xmlAttribute = null;

            try
            {

                XmlNode xmlnode = xmldocument.SelectSingleNode(xPath);

                if (xmlnode != null)
                {

                    if (xmlnode.Attributes.Count > 0)
                    {

                        foreach (XmlAttribute attribute in xmlnode.Attributes)
                        {

                            if (attribute.Name.ToLower() == attributeName.ToLower())
                            {

                                xmlAttribute = attribute;

                                break;

                            }

                        }

                    }

                    if (xmlAttribute != null)
                    {

                        xmlnode.Attributes.Remove(xmlAttribute);

                        xmldocument.Save(xmlFileName);

                        isSuccess = true;

                    }

                }

            }

            catch (Exception err)
            {

                throw err;

            }

            return isSuccess;

        }



        /// <summary>

        /// 创建指定节点的属性,如果属性存在则不创建

        /// </summary>

        /// <param name="xmlFileName"></param>

        /// <param name="xPath"></param>

        /// <param name="attributeName"></param>

        /// <param name="value"></param>

        /// <returns></returns>

        public static bool AddAttribute(string xmlFileName, string xPath, string attributeName, string value)
        {

            bool isSuccess = false;

            XmlDocument xmldocument = new XmlDocument();

            xmldocument.Load(xmlFileName);

            try
            {

                XmlNode xmlnode = xmldocument.SelectSingleNode(xPath);

                if (xmlnode != null)
                {

                    if (xmlnode.Attributes.Count > 0)//遍历判断有无此属性
                    {

                        foreach (XmlAttribute attribute in xmlnode.Attributes)
                        {

                            if (attribute.Name.ToLower() == attributeName.ToLower())
                            {

                                //有则不改,直接返回true;

                                return true;

                            }

                        }

                    }

                    XmlAttribute xmlAttribute = xmldocument.CreateAttribute(attributeName);

                    xmlAttribute.Value = value;

                    xmlnode.Attributes.Append(xmlAttribute);

                    xmldocument.Save(xmlFileName);

                    isSuccess = true;

                }

            }

            catch (Exception err)
            {

                throw err;

            }

            return isSuccess;

        }



        /// <summary>

        /// 为某一指定路径节点下添加新的节点,如果该节点存在,则不添加

        /// </summary>

        /// <param name="xmlFileName">xml文档路径</param>

        /// <param name="xPath">需要添加节点的路径</param>

        /// <param name="nodeName">节点名称</param>

        /// <param name="innerText">节点文本值</param>

        /// <returns>成功返回true,存在返回false</returns>

        public static bool AddNode(string xmlFileName, string xPath, string nodeName, string innerText)
        {

            bool isSuccess = false;

            bool isExisitNode = false;

            XmlDocument xmldocument = new XmlDocument();

            xmldocument.Load(xmlFileName);

            try
            {

                XmlNode xmlnode = xmldocument.SelectSingleNode(xPath);

                if (xmlnode != null)
                {

                    isExisitNode = true;

                }

                if (!isExisitNode)
                {

                    XmlElement subElement = xmldocument.CreateElement(nodeName);

                    subElement.InnerText = innerText;

                    xmlnode.AppendChild(subElement);

                    isSuccess = true;

                    xmldocument.Save(xmlFileName);

                }

            }

            catch (Exception err)
            {

                throw err;

            }



            return isSuccess;

        }



        /// <summary>

        /// 查找指定的节点,更新其节点值

        /// </summary>

        /// <param name="xmlFileName"></param>

        /// <param name="xPath"></param>

        /// <param name="nodeName"></param>

        /// <param name="innerText"></param>

        /// <returns></returns>

        public static bool UpdateNode(string xmlFileName, string xPath, string nodeName, string innerText)
        {

            bool isSuccess = false;

            bool isExisitNode = false;

            XmlDocument xmldocument = new XmlDocument();

            xmldocument.Load(xmlFileName);

            XmlNode xmlnode = xmldocument.SelectSingleNode(xPath);

            try
            {

                if (xmlnode != null)
                {

                    isExisitNode = true;

                }

                if (!isExisitNode)
                {

                    xmlnode.InnerText = innerText;

                    isSuccess = true;

                    xmldocument.Save(xmlFileName);

                }

            }

            catch (Exception err)
            {

                throw err;

            }



            return isSuccess;

        }



        /// <summary>

        /// 删除指定节点名称为nodeName的所有节点,如果该节点有子节点,则不能删除

        /// </summary>

        /// <param name="xmlFileName"></param>

        /// <param name="xPath"></param>

        /// <param name="nodeName"></param>

        /// <returns></returns>

        public static bool deleteNode(string xmlFileName, string xPath, string nodeName)
        {

            bool isSuccess = false;

            XmlDocument xmldocument = new XmlDocument();

            xmldocument.Load(xmlFileName);

            try
            {

                XmlNode xmlnode = xmldocument.SelectSingleNode(xPath);

                if (xmlnode != null)
                {

                    if (xmlnode.HasChildNodes)
                    {

                        isSuccess = false;

                    }

                    else
                    {

                        xmlnode.ParentNode.RemoveChild(xmlnode);//删除节点

                        isSuccess = true;

                        xmldocument.Save(xmlFileName);

                    }

                }

            }

            catch (Exception err)
            {

                throw err;

            }

            return isSuccess;

        }

        /// <summary>

        /// 根据指定节点名称更新其下指定的子节点的值

        /// </summary>

        /// <param name="xmlFileName"></param>

        /// <param name="xPath"></param>

        /// <param name="nodeName"></param>

        /// <param name="innerText"></param>

        /// <returns></returns>

        public static bool UpdateChildNode(string xmlFileName, string xPath, string nodeName, string childName, string innerText)
        {

            bool isSuccess = false;

            XmlDocument xmldocument = new XmlDocument();

            xmldocument.Load(xmlFileName);

            try
            {

                XmlNode xmlnode = xmldocument.SelectSingleNode(xPath);

                if (xmlnode != null)
                {

                    foreach (XmlNode node in xmlnode.ChildNodes)
                    {

                        if (node.Name.ToLower() == childName.ToLower())
                        {

                            node.InnerText = innerText;

                            xmldocument.Save(xmlFileName);

                            isSuccess = true;

                        }

                    }

                }

            }

            catch (Exception err)
            {

                throw err;

            }

            return isSuccess;

        }



        #region 创建XML的根节点

        /// <summary>

        /// 创建XML的根节点

        /// </summary>

        private void CreateXMLElement()
        {



            //创建一个XML对象

            objXmlDoc = new XmlDocument();



            if (File.Exists(strXmlFile))
            {

                //加载XML文件

                objXmlDoc.Load(this.strXmlFile);

            }



            //为XML的根节点赋值

            _element = objXmlDoc.DocumentElement;

        }

        #endregion



        #region XML文档创建和节点或属性的添加、修改

        /// <summary>

        /// 创建一个XML文档

        /// </summary>

        /// <param name="xmlFileName">XML文档完全文件名(包含物理路径)</param>

        /// <param name="rootNodeName">XML文档根节点名称(须指定一个根节点名称)</param>

        /// <param name="version">XML文档版本号(必须为:"1.0")</param>

        /// <param name="encoding">XML文档编码方式</param>

        /// <param name="standalone">该值必须是"yes"或"no",如果为null,Save方法不在XML声明上写出独立属性</param>

        /// <returns>成功返回true,失败返回false</returns>

        public static bool CreateXmlDocument(string xmlFileName, string rootNodeName, string version, string encoding, string standalone)
        {

            bool isSuccess = false;

            try
            {

                XmlDocument xmlDoc = new XmlDocument();

                XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration(version, encoding, standalone);

                XmlNode root = xmlDoc.CreateElement(rootNodeName);

                xmlDoc.AppendChild(xmlDeclaration);

                xmlDoc.AppendChild(root);

                xmlDoc.Save(xmlFileName);

                isSuccess = true;

            }

            catch (Exception ex)
            {

                throw ex; //这里可以定义你自己的异常处理

            }

            return isSuccess;

        }

        #endregion
    }

 

posted @ 2016-12-20 00:46  微笑代表淡定.Net  阅读(98)  评论(0)    收藏  举报