zoukankan      html  css  js  c++  java
  • C#XmlHelper操作Xml文档的帮助类

    using System.Xml;
    using System.Data;
     
    namespace DotNet.Utilities
    {
        /// <summary>
        /// Xml的操作公共类
        /// </summary>    
        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
     
            #region 构造方法
            /// <summary>
            /// 实例化XmlHelper对象
            /// </summary>
            /// <param name="xmlFilePath">Xml文件的相对路径</param>
            public XmlHelper(string xmlFilePath)
            {
                //获取XML文件的绝对路径
                _filePath = SysHelper.GetPath(xmlFilePath);
            }
            #endregion
     
            #region 创建XML的根节点
            /// <summary>
            /// 创建XML的根节点
            /// </summary>
            private void CreateXMLElement()
            {
     
                //创建一个XML对象
                _xml = new XmlDocument();
     
                if (DirFile.IsExistFile(_filePath))
                {
                    //加载XML文件
                    _xml.Load(this._filePath);
                }
     
                //为XML的根节点赋值
                _element = _xml.DocumentElement;
            }
            #endregion
     
            #region 获取指定XPath表达式的节点对象
            /// <summary>
            /// 获取指定XPath表达式的节点对象
            /// </summary>        
            /// <param name="xPath">XPath表达式,
            /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
            /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
            /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
            /// </param>
            public XmlNode GetNode(string xPath)
            {
                //创建XML的根节点
                CreateXMLElement();
     
                //返回XPath节点
                return _element.SelectSingleNode(xPath);
            }
            #endregion
     
            #region 获取指定XPath表达式节点的值
            /// <summary>
            /// 获取指定XPath表达式节点的值
            /// </summary>
            /// <param name="xPath">XPath表达式,
            /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
            /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
            /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
            /// </param>
            public string GetValue(string xPath)
            {
                //创建XML的根节点
                CreateXMLElement();
     
                //返回XPath节点的值
                return _element.SelectSingleNode(xPath).InnerText;
            }
            #endregion
     
            #region 获取指定XPath表达式节点的属性值
            /// <summary>
            /// 获取指定XPath表达式节点的属性值
            /// </summary>
            /// <param name="xPath">XPath表达式,
            /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
            /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
            /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
            /// </param>
            /// <param name="attributeName">属性名</param>
            public string GetAttributeValue(string xPath, string attributeName)
            {
                //创建XML的根节点
                CreateXMLElement();
     
                //返回XPath节点的属性值
                return _element.SelectSingleNode(xPath).Attributes[attributeName].Value;
            }
            #endregion
     
            #region 新增节点
            /// <summary>
            /// 1. 功能:新增节点。
            /// 2. 使用条件:将任意节点插入到当前Xml文件中。
            /// </summary>        
            /// <param name="xmlNode">要插入的Xml节点</param>
            public void AppendNode(XmlNode xmlNode)
            {
                //创建XML的根节点
                CreateXMLElement();
     
                //导入节点
                XmlNode node = _xml.ImportNode(xmlNode, true);
     
                //将节点插入到根节点下
                _element.AppendChild(node);
            }
     
            /// <summary>
            /// 1. 功能:新增节点。
            /// 2. 使用条件:将DataSet中的第一条记录插入Xml文件中。
            /// </summary>        
            /// <param name="ds">DataSet的实例,该DataSet中应该只有一条记录</param>
            public void AppendNode(DataSet ds)
            {
                //创建XmlDataDocument对象
                XmlDataDocument xmlDataDocument = new XmlDataDocument(ds);
     
                //导入节点
                XmlNode node = xmlDataDocument.DocumentElement.FirstChild;
     
                //将节点插入到根节点下
                AppendNode(node);
            }
            #endregion
     
            #region 删除节点
            /// <summary>
            /// 删除指定XPath表达式的节点
            /// </summary>        
            /// <param name="xPath">XPath表达式,
            /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
            /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
            /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
            /// </param>
            public void RemoveNode(string xPath)
            {
                //创建XML的根节点
                CreateXMLElement();
     
                //获取要删除的节点
                XmlNode node = _xml.SelectSingleNode(xPath);
     
                //删除节点
                _element.RemoveChild(node);
            }
            #endregion //删除节点
     
            #region 保存XML文件
            /// <summary>
            /// 保存XML文件
            /// </summary>        
            public void Save()
            {
                //创建XML的根节点
                CreateXMLElement();
     
                //保存XML文件
                _xml.Save(this._filePath);
            }
            #endregion //保存XML文件
     
            #region 静态方法
     
            #region 创建根节点对象
            /// <summary>
            /// 创建根节点对象
            /// </summary>
            /// <param name="xmlFilePath">Xml文件的相对路径</param>        
            private static XmlElement CreateRootElement(string xmlFilePath)
            {
                //定义变量,表示XML文件的绝对路径
                string filePath = "";
     
                //获取XML文件的绝对路径
                filePath = SysHelper.GetPath(xmlFilePath);
     
                //创建XmlDocument对象
                XmlDocument xmlDocument = new XmlDocument();
                //加载XML文件
                xmlDocument.Load(filePath);
     
                //返回根节点
                return xmlDocument.DocumentElement;
            }
            #endregion
     
            #region 获取指定XPath表达式节点的值
            /// <summary>
            /// 获取指定XPath表达式节点的值
            /// </summary>
            /// <param name="xmlFilePath">Xml文件的相对路径</param>
            /// <param name="xPath">XPath表达式,
            /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
            /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
            /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
            /// </param>
            public static string GetValue(string xmlFilePath, string xPath)
            {
                //创建根对象
                XmlElement rootElement = CreateRootElement(xmlFilePath);
     
                //返回XPath节点的值
                return rootElement.SelectSingleNode(xPath).InnerText;
            }
            #endregion
     
            #region 获取指定XPath表达式节点的属性值
            /// <summary>
            /// 获取指定XPath表达式节点的属性值
            /// </summary>
            /// <param name="xmlFilePath">Xml文件的相对路径</param>
            /// <param name="xPath">XPath表达式,
            /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
            /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
            /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
            /// </param>
            /// <param name="attributeName">属性名</param>
            public static string GetAttributeValue(string xmlFilePath, string xPath, string attributeName)
            {
                //创建根对象
                XmlElement rootElement = CreateRootElement(xmlFilePath);
     
                //返回XPath节点的属性值
                return rootElement.SelectSingleNode(xPath).Attributes[attributeName].Value;
            }
            #endregion
     
            #endregion
     
            public static void SetValue(string xmlFilePath, string xPath, string newtext)
            {
                //string path = SysHelper.GetPath(xmlFilePath);
                //var queryXML = from xmlLog in xelem.Descendants("msg_log")
                //               //所有名字为Bin的记录
                //               where xmlLog.Element("user").Value == "Bin"
                //               select xmlLog;
     
                //foreach (XElement el in queryXML)
                //{
                //    el.Element("user").Value = "LiuBin";//开始修改
                //}
                //xelem.Save(path);
            }
        }
    }

    出处:https://www.cnblogs.com/starksoft/p/3935529.html

  • 相关阅读:
    out/host/linuxx86/obj/EXECUTABLES/aapt_intermediates/aapt 64 32 操作系统
    linux 查看路由器 电脑主机 端口号 占用
    linux proc进程 pid stat statm status id 目录 解析 内存使用
    linux vim 设置大全详解
    ubuntu subclipse svn no libsvnjavahl1 in java.library.path no svnjavahl1 in java.library.path no s
    win7 安装 ubuntu 双系统 详解 easybcd 工具 不能进入 ubuntu 界面
    Atitit.json xml 序列化循环引用解决方案json
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    Atitit.跨语言  文件夹与文件的io操作集合  草案
    Atitit.atijson 类库的新特性设计与实现 v3 q31
  • 原文地址:https://www.cnblogs.com/mq0036/p/10313746.html
Copyright © 2011-2022 走看看