C#操作xml工具类

jopen 10年前

using System;   using System.Collections.Generic;     using System.Linq;     using System.Web;     using System.Xml;     using System.IO;           namespace Helper     {         public  class xmlHelper         {             #region 字段             /// <summary>             /// xml文件物理路径             /// </summary>             private  string _FilePath = string.Empty;             /// <summary>             /// xml文档             /// </summary>             private XmlDocument _xml;             /// <summary>             /// xml文档根节点             /// </summary>             private XmlElement _element;             #endregion                   public xmlHelper()             {                 //             }                   /// <summary>             /// 给xml文档路径赋值             /// </summary>             /// <param name="xmlFilePath"></param>             public xmlHelper(string xmlFilePath)             {                 _FilePath = xmlFilePath;             }                   /// <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对象                 _xml = new XmlDocument();                       if (File.Exists(_FilePath))                 {                     //加载XML文件                     _xml.Load(this._FilePath);                 }                       //为XML的根节点赋值                 _element = _xml.DocumentElement;             }             #endregion                   #region 保存XML文件             /// <summary>             /// 保存XML文件             /// </summary>                     public void Save()             {                 //创建XML的根节点                 //CreateXMLElement();                       //保存XML文件                 _xml.Save(this._FilePath);             }             #endregion //保存XML文件                         #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         }     }