博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# XML操作类
阅读量:4309 次
发布时间:2019-06-06

本文共 25099 字,大约阅读时间需要 83 分钟。

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

 

using System;using System.Data;using System.IO;using System.Xml;namespace DotNet.Utilities{    public class XMLProcess    {        #region 构造函数        public XMLProcess()        { }        public XMLProcess(string strPath)        {            this._XMLPath = strPath;        }        #endregion        #region 公有属性        private string _XMLPath;        public string XMLPath        {            get { return this._XMLPath; }        }        #endregion        #region 私有方法        ///         /// 导入XML文件        ///         /// XML文件路径        private XmlDocument XMLLoad()        {            string XMLFile = XMLPath;            XmlDocument xmldoc = new XmlDocument();            try            {                string filename = AppDomain.CurrentDomain.BaseDirectory.ToString() + XMLFile;                if (File.Exists(filename)) xmldoc.Load(filename);            }            catch (Exception e)            { }            return xmldoc;        }        ///         /// 导入XML文件        ///         /// XML文件路径        private static XmlDocument XMLLoad(string strPath)        {            XmlDocument xmldoc = new XmlDocument();            try            {                string filename = AppDomain.CurrentDomain.BaseDirectory.ToString() + strPath;                if (File.Exists(filename)) xmldoc.Load(filename);            }            catch (Exception e)            { }            return xmldoc;        }        ///         /// 返回完整路径        ///         /// Xml的路径        private static string GetXmlFullPath(string strPath)        {            if (strPath.IndexOf(":") > 0)            {                return strPath;            }            else            {                return System.Web.HttpContext.Current.Server.MapPath(strPath);            }        }        #endregion        #region 读取数据        ///         /// 读取指定节点的数据        ///         /// 节点        /// 使用示列:        /// XMLProsess.Read("/Node", "")        /// XMLProsess.Read("/Node/Element[@Attribute='Name']")        public string Read(string node)        {            string value = "";            try            {                XmlDocument doc = XMLLoad();                XmlNode xn = doc.SelectSingleNode(node);                value = xn.InnerText;            }            catch { }            return value;        }        ///         /// 读取指定路径和节点的串联值        ///         /// 路径        /// 节点        /// 属性名,非空时返回该属性值,否则返回串联值        /// 使用示列:        /// XMLProsess.Read(path, "/Node", "")        /// XMLProsess.Read(path, "/Node/Element[@Attribute='Name']")        public static string Read(string path, string node)        {            string value = "";            try            {                XmlDocument doc = XMLLoad(path);                XmlNode xn = doc.SelectSingleNode(node);                value = xn.InnerText;            }            catch { }            return value;        }        ///         /// 读取指定路径和节点的属性值        ///         /// 路径        /// 节点        /// 属性名,非空时返回该属性值,否则返回串联值        /// 使用示列:        /// XMLProsess.Read(path, "/Node", "")        /// XMLProsess.Read(path, "/Node/Element[@Attribute='Name']", "Attribute")        public static string Read(string path, string node, string attribute)        {            string value = "";            try            {                XmlDocument doc = XMLLoad(path);                XmlNode xn = doc.SelectSingleNode(node);                value = (attribute.Equals("") ? xn.InnerText : xn.Attributes[attribute].Value);            }            catch { }            return value;        }        ///         /// 获取某一节点的所有孩子节点的值        ///         /// 要查询的节点        public string[] ReadAllChildallValue(string node)        {            int i = 0;            string[] str = { };            XmlDocument doc = XMLLoad();            XmlNode xn = doc.SelectSingleNode(node);            XmlNodeList nodelist = xn.ChildNodes;  //得到该节点的子节点            if (nodelist.Count > 0)            {                str = new string[nodelist.Count];                foreach (XmlElement el in nodelist)//读元素值                {                    str[i] = el.Value;                    i++;                }            }            return str;        }        ///         /// 获取某一节点的所有孩子节点的值        ///         /// 要查询的节点        public XmlNodeList ReadAllChild(string node)        {            XmlDocument doc = XMLLoad();            XmlNode xn = doc.SelectSingleNode(node);            XmlNodeList nodelist = xn.ChildNodes;  //得到该节点的子节点            return nodelist;        }        ///          /// 读取XML返回经排序或筛选后的DataView        ///         /// 筛选条件,如:"name='kgdiwss'"        ///  排序条件,如:"Id desc"        public DataView GetDataViewByXml(string strWhere, string strSort)        {            try            {                string XMLFile = this.XMLPath;                string filename = AppDomain.CurrentDomain.BaseDirectory.ToString() + XMLFile;                DataSet ds = new DataSet();                ds.ReadXml(filename);                DataView dv = new DataView(ds.Tables[0]); //创建DataView来完成排序或筛选操作                    if (strSort != null)                {                    dv.Sort = strSort; //对DataView中的记录进行排序                }                if (strWhere != null)                {                    dv.RowFilter = strWhere; //对DataView中的记录进行筛选,找到我们想要的记录                }                return dv;            }            catch (Exception)            {                return null;            }        }        ///         /// 读取XML返回DataSet        ///         /// XML文件相对路径        public DataSet GetDataSetByXml(string strXmlPath)        {            try            {                DataSet ds = new DataSet();                ds.ReadXml(GetXmlFullPath(strXmlPath));                if (ds.Tables.Count > 0)                {                    return ds;                }                return null;            }            catch (Exception)            {                return null;            }        }        #endregion        #region 插入数据        ///         /// 插入数据        ///         /// 路径        /// 节点        /// 元素名,非空时插入新元素,否则在该元素中插入属性        /// 属性名,非空时插入该元素属性值,否则插入元素值        /// 值        /// 使用示列:        /// XMLProsess.Insert(path, "/Node", "Element", "", "Value")        /// XMLProsess.Insert(path, "/Node", "Element", "Attribute", "Value")        /// XMLProsess.Insert(path, "/Node", "", "Attribute", "Value")        public static void Insert(string path, string node, string element, string attribute, string value)        {            try            {                XmlDocument doc = new XmlDocument();                doc.Load(AppDomain.CurrentDomain.BaseDirectory.ToString() + path);                XmlNode xn = doc.SelectSingleNode(node);                if (element.Equals(""))                {                    if (!attribute.Equals(""))                    {                        XmlElement xe = (XmlElement)xn;                        xe.SetAttribute(attribute, value);                    }                }                else                {                    XmlElement xe = doc.CreateElement(element);                    if (attribute.Equals(""))                        xe.InnerText = value;                    else                        xe.SetAttribute(attribute, value);                    xn.AppendChild(xe);                }                doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + path);            }            catch { }        }        ///         /// 插入数据        ///         /// 路径        /// 节点        /// 元素名,非空时插入新元素,否则在该元素中插入属性        /// 由XML属性名和值组成的二维数组        public static void Insert(string path, string node, string element, string[][] strList)        {            try            {                XmlDocument doc = new XmlDocument();                doc.Load(AppDomain.CurrentDomain.BaseDirectory.ToString() + path);                XmlNode xn = doc.SelectSingleNode(node);                XmlElement xe = doc.CreateElement(element);                string strAttribute = "";                string strValue = "";                for (int i = 0; i < strList.Length; i++)                {                    for (int j = 0; j < strList[i].Length; j++)                    {                        if (j == 0)                            strAttribute = strList[i][j];                        else                            strValue = strList[i][j];                    }                    if (strAttribute.Equals(""))                        xe.InnerText = strValue;                    else                        xe.SetAttribute(strAttribute, strValue);                }                xn.AppendChild(xe);                doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + path);            }            catch { }        }        ///         /// 插入一行数据        ///         /// XML文件相对路径        /// 要插入行的列名数组,如:string[] Columns = {"name","IsMarried"};        /// 要插入行每列的值数组,如:string[] ColumnValue={"XML大全","false"};        /// 
成功返回true,否则返回false
public static bool WriteXmlByDataSet(string strXmlPath, string[] Columns, string[] ColumnValue) { try { //根据传入的XML路径得到.XSD的路径,两个文件放在同一个目录下 string strXsdPath = strXmlPath.Substring(0, strXmlPath.IndexOf(".")) + ".xsd"; DataSet ds = new DataSet(); ds.ReadXmlSchema(GetXmlFullPath(strXsdPath)); //读XML架构,关系到列的数据类型 ds.ReadXml(GetXmlFullPath(strXmlPath)); DataTable dt = ds.Tables[0]; DataRow newRow = dt.NewRow(); //在原来的表格基础上创建新行 for (int i = 0; i < Columns.Length; i++) //循环给一行中的各个列赋值 { newRow[Columns[i]] = ColumnValue[i]; } dt.Rows.Add(newRow); dt.AcceptChanges(); ds.AcceptChanges(); ds.WriteXml(GetXmlFullPath(strXmlPath)); return true; } catch (Exception) { return false; } } #endregion #region 修改数据 /// /// 修改指定节点的数据 /// /// 节点 /// 值 public void Update(string node, string value) { try { XmlDocument doc = XMLLoad(); XmlNode xn = doc.SelectSingleNode(node); xn.InnerText = value; doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + XMLPath); } catch { } } /// /// 修改指定节点的数据 /// /// 路径 /// 节点 /// 值 /// 使用示列: /// XMLProsess.Insert(path, "/Node","Value") /// XMLProsess.Insert(path, "/Node","Value") public static void Update(string path, string node, string value) { try { XmlDocument doc = XMLLoad(path); XmlNode xn = doc.SelectSingleNode(node); xn.InnerText = value; doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + path); } catch { } } /// /// 修改指定节点的属性值(静态) /// /// 路径 /// 节点 /// 属性名,非空时修改该节点属性值,否则修改节点值 /// 值 /// 使用示列: /// XMLProsess.Insert(path, "/Node", "", "Value") /// XMLProsess.Insert(path, "/Node", "Attribute", "Value") public static void Update(string path, string node, string attribute, string value) { try { XmlDocument doc = XMLLoad(path); XmlNode xn = doc.SelectSingleNode(node); XmlElement xe = (XmlElement)xn; if (attribute.Equals("")) xe.InnerText = value; else xe.SetAttribute(attribute, value); doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + path); } catch { } } /// /// 更改符合条件的一条记录 /// /// XML文件路径 /// 列名数组 /// 列值数组 /// 条件列名 /// 条件列值 public static bool UpdateXmlRow(string strXmlPath, string[] Columns, string[] ColumnValue, string strWhereColumnName, string strWhereColumnValue) { try { string strXsdPath = strXmlPath.Substring(0, strXmlPath.IndexOf(".")) + ".xsd"; DataSet ds = new DataSet(); ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));//读XML架构,关系到列的数据类型 ds.ReadXml(GetXmlFullPath(strXmlPath)); //先判断行数 if (ds.Tables[0].Rows.Count > 0) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { //如果当前记录为符合Where条件的记录 if (ds.Tables[0].Rows[i][strWhereColumnName].ToString().Trim().Equals(strWhereColumnValue)) { //循环给找到行的各列赋新值 for (int j = 0; j < Columns.Length; j++) { ds.Tables[0].Rows[i][Columns[j]] = ColumnValue[j]; } ds.AcceptChanges(); //更新DataSet ds.WriteXml(GetXmlFullPath(strXmlPath));//重新写入XML文件 return true; } } } return false; } catch (Exception) { return false; } } #endregion #region 删除数据 /// /// 删除节点值 /// /// 路径 /// 节点 /// 属性名,非空时删除该节点属性值,否则删除节点值 /// 值 /// 使用示列: /// XMLProsess.Delete(path, "/Node", "") /// XMLProsess.Delete(path, "/Node", "Attribute") public static void Delete(string path, string node) { try { XmlDocument doc = XMLLoad(path); XmlNode xn = doc.SelectSingleNode(node); xn.ParentNode.RemoveChild(xn); doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + path); } catch { } } /// /// 删除数据 /// /// 路径 /// 节点 /// 属性名,非空时删除该节点属性值,否则删除节点值 /// 值 /// 使用示列: /// XMLProsess.Delete(path, "/Node", "") /// XMLProsess.Delete(path, "/Node", "Attribute") public static void Delete(string path, string node, string attribute) { try { XmlDocument doc = XMLLoad(path); XmlNode xn = doc.SelectSingleNode(node); XmlElement xe = (XmlElement)xn; if (attribute.Equals("")) xn.ParentNode.RemoveChild(xn); else xe.RemoveAttribute(attribute); doc.Save(AppDomain.CurrentDomain.BaseDirectory.ToString() + path); } catch { } } /// /// 删除所有行 /// /// XML路径 public static bool DeleteXmlAllRows(string strXmlPath) { try { DataSet ds = new DataSet(); ds.ReadXml(GetXmlFullPath(strXmlPath)); if (ds.Tables[0].Rows.Count > 0) { ds.Tables[0].Rows.Clear(); } ds.WriteXml(GetXmlFullPath(strXmlPath)); return true; } catch (Exception) { return false; } } /// /// 通过删除DataSet中指定索引行,重写XML以实现删除指定行 /// /// 要删除的行在DataSet中的Index值 public static bool DeleteXmlRowByIndex(string strXmlPath, int iDeleteRow) { try { DataSet ds = new DataSet(); ds.ReadXml(GetXmlFullPath(strXmlPath)); if (ds.Tables[0].Rows.Count > 0) { ds.Tables[0].Rows[iDeleteRow].Delete(); } ds.WriteXml(GetXmlFullPath(strXmlPath)); return true; } catch (Exception) { return false; } } /// /// 删除指定列中指定值的行 /// /// XML相对路径 /// 列名 /// 指定值 public static bool DeleteXmlRows(string strXmlPath, string strColumn, string[] ColumnValue) { try { DataSet ds = new DataSet(); ds.ReadXml(GetXmlFullPath(strXmlPath)); if (ds.Tables[0].Rows.Count > 0) { //判断行多还是删除的值多,多的for循环放在里面 if (ColumnValue.Length > ds.Tables[0].Rows.Count) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { for (int j = 0; j < ColumnValue.Length; j++) { if (ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j])) { ds.Tables[0].Rows[i].Delete(); } } } } else { for (int j = 0; j < ColumnValue.Length; j++) { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { if (ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j])) { ds.Tables[0].Rows[i].Delete(); } } } } ds.WriteXml(GetXmlFullPath(strXmlPath)); } return true; } catch (Exception) { return false; } } #endregion }}
XmlProcess

 

转载于:https://www.cnblogs.com/Liyuting/p/7059189.html

你可能感兴趣的文章
通过SQL语句直接实现Excel与数据库的导入导出
查看>>
jenkins-小知识点
查看>>
visio二次开发——图纸解析
查看>>
如何在Windows Mobile下使用.NET Compact Framework画透明图片
查看>>
App后台开发架构实践笔记
查看>>
Set集合中的treeSet问题:cannot be cast to java.lang.Comparable;
查看>>
LeetCode-Maximum Product Subarray-最大乘积子数组-情况判断
查看>>
支付渠道路由系统进化史
查看>>
计算机领域会议和期刊
查看>>
shell 获得后台进程返回值
查看>>
python 多线程_thread
查看>>
SpringBoot2.0 + SpringCloud Eureka搭建高可用注册中心(Eureka之三)
查看>>
vue.js 组件-全局组件和局部组件
查看>>
svn 分支与合并的使用
查看>>
intellj idea
查看>>
浮动(clear)
查看>>
HierarchicalDataTemplate
查看>>
关于 keybd_event (vb篇)
查看>>
记公司的原型设计软件培训课程
查看>>
C语言知识点
查看>>