• XMLHelper.cs


    http://yunpan.cn/Q7czcYTwE8qkc  提取码 545c


    using System;

    using System.Linq;
    using System.Xml.Linq;
    using System.Xml;
    using System.Data;
    using System.Configuration;
    /// 这个是用VS2010写的,如果用VS2005,请去掉System.Linq和System.Xml.Linq的引用
    /// 可以将此文件直接编译成dll,今后程序只需要引用该dll后开头添加using XmlLibrary;即可。
    namespace XmlLibrary
    {
        ///
        /// XMLHelper参数
        ///
        public class XmlParameter
        {
            private string _name;
            private string _innerText;
            private string _namespaceOfPrefix;
            private AttributeParameter[] _attributes;
            public XmlParameter() { }
            public XmlParameter(string name, params AttributeParameter[] attParas) : this(name, null, null, attParas) { }
            public XmlParameter(string name, string innerText, params AttributeParameter[] attParas) : this(name, innerText, null, attParas) { }
            public XmlParameter(string name, string innerText, string namespaceOfPrefix, params AttributeParameter[] attParas)
            {
                this._name = name;
                this._innerText = innerText;
                this._namespaceOfPrefix = namespaceOfPrefix;
                this._attributes = attParas;
            }
            ///
            /// 节点名称
            ///
            public string Name
            {
                get { return this._name; }
                set { this._name = value; }
            }
            ///
            /// 节点文本
            ///
            public string InnerText
            {
                get { return this._innerText; }
                set { this._innerText = value; }
            }
            ///
            /// 节点前缀xmlns声明(命名空间URI)
            ///
            public string NamespaceOfPrefix
            {
                get { return this._namespaceOfPrefix; }
                set { this._namespaceOfPrefix = value; }
            }
            ///
            /// 节点属性集
            ///
            public AttributeParameter[] Attributes
            {
                get { return this._attributes; }
                set { this._attributes = value; }
            }
        }
        ///
        /// 节点属性参数
        ///
        public class AttributeParameter
        {
            private string _name;
            private string _value;
            public AttributeParameter() { }
            public AttributeParameter(string attributeName, string attributeValue)
            {
                this._name = attributeName;
                this._value = attributeValue;
            }
            ///
            /// 属性名称
            ///
            public string Name
            {
                get { return this._name; }
                set { this._name = value; }
            }
            ///
            /// 属性值
            ///
            public string Value
            {
                get { return this._value; }
                set { this._value = value; }
            }
        }
        ///
        /// FileName: XMLHelper
        /// Author: ziyou
        /// Create Date: 2011-5-11
        /// Email: ysli_195@163.com
        /// Version: 2.0.0.0
        /// Rewrite: 2011-5-11
        ///
        public class XMLHelper
        {
            private static string _xPath;
            ///
            /// xml文件路径
            ///
            public static string XmlPath
            {
                get { return _xPath; }
                set { _xPath = value; }
            }
            private static string _configName = "XmlPath";
            ///
            /// 配置文件节点名称,请设置在AppSettings节点下
            ///
            public static string ConfigName
            {
                get { return _configName; }
                set { _configName = value; GetConfig(); }
            }
            ///
            /// 从配置文件读取xml路径
            ///
            static void GetConfig()
            {
                if (string.IsNullOrEmpty(_xPath))
                {
                    try
                    {
                        _xPath = ConfigurationManager.AppSettings[_configName];
                    }
                    catch { }
                }
            }
            static XMLHelper() { GetConfig(); }
            #region private A
            ///
            /// 添加一个子节点
            ///
            /// XmlDocument对象
            /// 父节点
            /// Xml参数
            private static void A(XmlDocument xDoc, XmlNode parentNode, params XmlParameter[] xlParameter)
            {
                foreach (XmlParameter xpar in xlParameter)
                {
                    XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, xpar.Name, null);
                    string ns = string.IsNullOrEmpty(xpar.NamespaceOfPrefix) ? "" : newNode.GetNamespaceOfPrefix(xpar.NamespaceOfPrefix);
                    foreach (AttributeParameter attp in xpar.Attributes)
                    {
                        XmlNode attr = xDoc.CreateNode(XmlNodeType.Attribute, attp.Name, ns == "" ? null : ns);
                        attr.Value = attp.Value;
                        newNode.Attributes.SetNamedItem(attr);
                    }
                    newNode.InnerText = xpar.InnerText;
                    parentNode.A(newNode);
                }
            }
            #endregion
            #region private AddEveryNode
            private static void AddEveryNode(XmlDocument xDoc, XmlNode parentNode, params XmlParameter[] paras)
            {
                XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
                foreach (XmlNode xns in nlst)
                {
                    if (xns.Name == parentNode.Name)
                    {
                        A(xDoc, xns, paras);
                    }
                    else
                    {
                        foreach (XmlNode xn in xns)
                        {
                            if (xn.Name == parentNode.Name)
                            {
                                A(xDoc, xn, paras);
                            }
                        }
                    }
                }
            }
            #endregion
            #region private GetXmlDom
            ///
            /// 获得一个XmlDocument对象
            ///
            ///
            private static XmlDocument GetXmlDom()
            {
                XmlDocument xdoc = new XmlDocument();
                xdoc.Load(_xPath);
                return xdoc;
            }
            #endregion
            #region CreateXmlFile
            ///
            /// 创建一个XML文档,成功创建后操作路径将直接指向该文件
            ///
            /// 文件物理路径名
            /// 根结点名称
            /// 元素节点名称
            /// XML参数
            public static void CreateXmlFile(string fileName, string rootNode, string elementName, params XmlParameter[] xmlParameter)
            {
                XmlDocument xDoc = new XmlDocument();
                XmlNode xn = xDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
                xDoc.A(xn);
                XmlNode root = xDoc.createElement_x_x(rootNode);
                xDoc.A(root);
                XmlNode ln = xDoc.CreateNode(XmlNodeType.Element, elementName, null);
                A(xDoc, ln, xmlParameter);
                root.A(ln);
                try
                {
                    xDoc.Save(fileName);
                    _xPath = fileName;
                }
                catch
                {
                    throw;
                }
                finally
                {
                    xn = null;
                    root = null;
                    ln = null;
                    xDoc = null;
                    GC.Collect();
                }
            }
            ///
            /// 创建一个XML文档,成功创建后操作路径将直接指向该文件
            ///
            /// 文件物理路径名
            /// xml字符串
            public static void CreateXmlFile(string fileName, string xmlString)
            {
                XmlDocument xDoc = new XmlDocument();
                try
                {
                    xDoc.LoadXml(xmlString);
                    xDoc.Save(fileName);
                    _xPath = fileName;
                }
                catch { throw; }
                finally
                {
                    xDoc = null;
                    GC.Collect();
                }
            }
            #endregion
            #region AddNewNode
            ///
            /// 添加新节点
            ///
            /// 新节点的父节点对象
            /// Xml参数对象
            public static void AddNewNode(XmlNode parentNode, params XmlParameter[] xmlParameter)
            {
                XmlDocument xDoc = GetXmlDom();
                if (parentNode.Name == xDoc.DocumentElement.Name)
                {
                    XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, xDoc.DocumentElement.ChildNodes[0].Name, null);
                    A(xDoc, newNode, xmlParameter);
                    xDoc.DocumentElement.A(newNode);
                }
                else
                {
                    AddEveryNode(xDoc, parentNode, xmlParameter);
                }
                xDoc.Save(_xPath);
            }
            ///
            /// 添加新节点
            ///
            /// XmlDocument对象
            /// 新节点的父节点名称
            /// XML参数对象
            public static void AddNewNode(string parentName, params XmlParameter[] xmlParameter)
            {
                XmlDocument xDoc = GetXmlDom();
                XmlNode parentNode = GetNode(xDoc, parentName);
                if (parentNode == null) return;
                if (parentNode.Name == xDoc.DocumentElement.Name)
                {
                    XmlNode newNode = xDoc.CreateNode(XmlNodeType.Element, xDoc.DocumentElement.ChildNodes[0].Name, null);
                    A(xDoc, newNode, xmlParameter);
                    xDoc.DocumentElement.A(newNode);
                }
                else
                {
                    AddEveryNode(xDoc, parentNode, xmlParameter);
                }
                xDoc.Save(_xPath);
            }
            #endregion
            #region AddAttribute
            ///
            /// 添加节点属性
            ///
            /// 节点对象
            /// 该节点的命名空间URI
            /// 新属性名称
            /// 属性值
            public static void AddAttribute(XmlNode node, string namespaceOfPrefix, string attributeName, string attributeValue)
            {
                XmlDocument xDoc = GetXmlDom();
                string ns = string.IsNullOrEmpty(namespaceOfPrefix) ? "" : node.GetNamespaceOfPrefix(namespaceOfPrefix);
                XmlNode xn = xDoc.CreateNode(XmlNodeType.Attribute, attributeName, ns == "" ? null : ns);
                xn.Value = attributeValue;
                node.Attributes.SetNamedItem(xn);
                xDoc.Save(_xPath);
            }
            ///
            /// 添加节点属性
            ///
            /// 节点对象
            /// 该节点的命名空间URI
            /// 节点属性参数
            public static void AddAttribute(XmlNode node, string namespaceOfPrefix, params AttributeParameter[] attributeParameters)
            {
                XmlDocument xDoc = GetXmlDom();
                string ns = string.IsNullOrEmpty(namespaceOfPrefix) ? "" : node.GetNamespaceOfPrefix(namespaceOfPrefix);
                foreach (AttributeParameter attp in attributeParameters)
                {
                    XmlNode xn = xDoc.CreateNode(XmlNodeType.Attribute, attp.Name, ns == "" ? null : ns);
                    xn.Value = attp.Value;
                    node.Attributes.SetNamedItem(xn);
                }
                xDoc.Save(_xPath);
            }
            ///
            /// 添加节点属性
            ///
            /// 节点名称
            /// 该节点的命名空间URI
            /// 新属性名称
            /// 属性值
            public static void AddAttribute(string nodeName, string namespaceOfPrefix, string attributeName, string attributeValue)
            {
                XmlDocument xDoc = GetXmlDom();
                XmlNodeList xlst = xDoc.DocumentElement.ChildNodes;
                for (int i = 0; i < xlst.Count; i++)
                {
                    XmlNode node = GetNode(xlst[i], nodeName);
                    if (node == null) break;
                    AddAttribute(node, namespaceOfPrefix, attributeName, attributeValue);
                }
                xDoc.Save(_xPath);
            }
            ///
            /// 添加节点属性
            ///
            /// 节点名称
            /// 该节点的命名空间URI
            /// 节点属性参数
            public static void AddAttribute(string nodeName, string namespaceOfPrefix, params AttributeParameter[] attributeParameters)
            {
                XmlDocument xDoc = GetXmlDom();
                XmlNodeList xlst = xDoc.DocumentElement.ChildNodes;
                for (int i = 0; i < xlst.Count; i++)
                {
                    XmlNode node = GetNode(xlst[i], nodeName);
                    if (node == null) break;
                    AddAttribute(node, namespaceOfPrefix, attributeParameters);
                }
                xDoc.Save(_xPath);
            }
            #endregion
            #region GetNode
            ///
            /// 获取指定节点名称的节点对象
            ///
            /// 节点名称
            ///
            public static XmlNode GetNode(string nodeName)
            {
                XmlDocument xDoc =GetXmlDom();
                if (xDoc.DocumentElement.Name == nodeName) return (XmlNode)xDoc.DocumentElement;
                XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
                foreach (XmlNode xns in nlst)  // 遍历所有子节点
                {
                    if (xns.Name == nodeName) return xns;
                    else
                    {
                        XmlNode xn = GetNode(xns, nodeName);
                        if (xn != null) return xn;  /// V1.0.0.3添加节点判断
                    }
                }
                return null;
            }
            ///
            /// 获取指定节点名称的节点对象
            ///
            /// 节点对象
            /// 节点名称
            ///
            public static XmlNode GetNode(XmlNode node, string nodeName)
            {
                foreach (XmlNode xn in node)
                {
                    if (xn.Name == nodeName) return xn;
                    else
                    {
                        XmlNode tmp = GetNode(xn, nodeName);
                        if (tmp != null) return tmp;
                    }
                }
                return null;
            }
            ///
            /// 获取指定节点名称的节点对象
            ///
            /// 节点索引
            /// 节点名称
            public static XmlNode GetNode(int index, string nodeName)
            {
                XmlDocument xDoc = GetXmlDom();
                XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
                if (nlst.Count <= index) return null;
                if (nlst[index].Name == nodeName) return (XmlNode)nlst[index];
                foreach (XmlNode xn in nlst[index])
                {
                    return GetNode(xn, nodeName);
                }
                return null;
            }
            ///
            /// 获取指定节点名称的节点对象
            ///
            /// 节点对象
            /// 节点名称
            /// 节点内容
            public static XmlNode GetNode(XmlNode node, string nodeName, string innerText)
            {
                foreach (XmlNode xn in node)
                {
                    if (xn.Name == nodeName && xn.InnerText == innerText) return xn;
                    else
                    {
                        XmlNode tmp = GetNode(xn, nodeName, innerText);
                        if (tmp != null) return tmp;
                    }
                }
                return null;
            }
            ///
            /// 获取指定节点名称的节点对象
            ///
            /// 节点名称
            /// 节点内容
            public static XmlNode GetNode(string nodeName, string innerText)
            {
                XmlDocument xDoc = GetXmlDom();
                XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
                foreach (XmlNode xns in nlst)  // 遍历所有子节点
                {
                    if (xns.Name == nodeName && xns.InnerText == innerText) return xns;
                    XmlNode tmp = GetNode(xns, nodeName, innerText);
                    if (tmp != null) return tmp;
                }
                return null;
            }
            ///
            /// 获取指定节点名称的节点对象
            ///
            /// XML参数
            public static XmlNode GetNode(XmlParameter xmlParameter)
            {
                return GetNode(xmlParameter.Name, xmlParameter.InnerText);
            }
            ///
            /// 获取指定节点名称的节点对象
            ///
            /// 节点对象
            /// XML参数
            public static XmlNode GetNode(XmlNode node, XmlParameter xmlParameter)
            {
                return GetNode(node, xmlParameter.Name, node.InnerText);
            }
            #endregion
            #region UpdateNode
            private static void UpdateNode(XmlNode node, XmlParameter xmlParameter)
            {
                node.InnerText = xmlParameter.InnerText;
                for (int i = 0; i < xmlParameter.Attributes.Length; i++)
                {
                    for (int j = 0; j < node.Attributes.Count; j++)
                    {
                        if (node.Attributes[j].Name == xmlParameter.Attributes[i].Name)
                        {
                            node.Attributes[j].Value = xmlParameter.Attributes[i].Value;
                        }
                    }
                }
            }
            private static void UpdateNode(XmlNode node, string innerText, AttributeParameter[] attributeParameters)
            {
                node.InnerText = innerText;
                for (int i = 0; i < attributeParameters.Length; i++)
                {
                    for (int j = 0; j < node.Attributes.Count; j++)
                    {
                        if (node.Attributes[j].Name == attributeParameters[i].Name)
                        {
                            node.Attributes[j].Value = attributeParameters[i].Value;
                        }
                    }
                }
            }
            ///
            /// 修改节点的内容
            ///
            /// 节点索引
            /// XML参数对象
            public static void UpdateNode(int index, XmlParameter xmlParameter)
            {
                XmlDocument xDoc = GetXmlDom();
                XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
                if (nlst.Count <= index) return;
                if (nlst[index].Name == xmlParameter.Name)
                {
                    UpdateNode(nlst[index], xmlParameter);
                }
                else
                {
                    foreach (XmlNode xn in nlst[index])
                    {
                        XmlNode xnd = GetNode(xn, xmlParameter.Name);
                        if (xnd != null)
                        {
                            UpdateNode(xnd, xmlParameter);
                        }
                    }
                }
                xDoc.Save(_xPath);
            }
            ///
            /// 修改节点的内容
            ///
            /// 节点索引
            /// 节点名称
            /// 修改后的内容
            public static void UpdateNode(int index, string nodeName, string newInnerText)
            {
                XmlDocument xDoc = GetXmlDom();
                XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
                if (nlst.Count <= index) return;
                if (nlst[index].Name == nodeName)
                {
                    nlst[index].InnerText = newInnerText;
                }
                else
                {
                    foreach (XmlNode xn in nlst[index])
                    {
                        XmlNode xnd = GetNode(xn, nodeName);
                        if (xnd != null)
                        {
                            xnd.InnerText = newInnerText;
                        }
                    }
                }
                xDoc.Save(_xPath);
            }
            ///
            /// 修改节点的内容
            ///
            /// XmlParameter对象
            /// 修改后的内容
            /// 需要修改的属性
            public static void UpdateNode(XmlParameter xmlParameter, string innerText, params AttributeParameter[] attributeParameters)
            {
                XmlDocument xDoc = GetXmlDom();
                XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
                foreach (XmlNode xns in nlst)  // 遍历所有子节点
                {
                    if (xns.Name == xmlParameter.Name && xns.InnerText == xmlParameter.InnerText)
                    {
                        UpdateNode(xns, innerText, attributeParameters);
                        break;
                    }
                    XmlNode tmp = GetNode(xns, xmlParameter);
                    if (tmp != null)
                    {
                        UpdateNode(tmp, innerText, attributeParameters);
                        break;
                    }
                }
                xDoc.Save(_xPath);
            }
            #endregion
            #region DeleteNode
            ///
            /// 删除节点
            ///
            /// 节点索引
            public static void DeleteNode(int index)
            {
                XmlDocument xDoc = GetXmlDom();
                XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
                nlst[index].ParentNode.RemoveChild(nlst[index]);
                xDoc.Save(_xPath);
            }
            ///
            /// 删除节点
            ///
            /// 需要删除的节点对象
            public static void DeleteNode(params XmlNode[] nodeList)
            {
                XmlDocument xDoc = GetXmlDom();
                foreach (XmlNode xnl in nodeList)
                {
                    foreach (XmlNode xn in xDoc.DocumentElement.ChildNodes)
                    {
                        if (xnl.Equals(xn))
                        {
                            xn.ParentNode.RemoveChild(xn);
                            break;
                        }
                    }
                }
                xDoc.Save(_xPath);
            }
            ///
            /// 删除节点
            ///
            /// XmlDocument对象
            /// 节点名称
            /// 节点内容
            public static void DeleteNode(string nodeName, string nodeText)
            {
                XmlDocument xDoc = GetXmlDom();
                foreach (XmlNode xn in xDoc.DocumentElement.ChildNodes)
                {
                    if (xn.Name == nodeName)
                    {
                        if (xn.InnerText == nodeText)
                        {
                            xn.ParentNode.RemoveChild(xn);
                            return;
                        }
                    }
                    else
                    {
                        XmlNode node = GetNode(xn, nodeName);
                        if (node != null && node.InnerText == nodeText)
                        {
                            node.ParentNode.ParentNode.RemoveChild(node.ParentNode);
                            return;
                        }
                    }
                }
                xDoc.Save(_xPath);
            }
            #endregion
            #region SetAttribute
            ///
            /// 修改属性值
            ///
            /// 元素对象
            /// 属性参数
            private static void SetAttribute(XmlElement elem, params AttributeParameter[] attps)
            {
                foreach (AttributeParameter attp in attps)
                {
                    elem.SetAttribute(attp.Name, attp.Value);
                }
            }
            ///
            /// 修改属性值
            ///
            /// XML参数
            /// 属性参数
            public static void SetAttribute(XmlParameter xmlParameter, params AttributeParameter[] attributeParameters)
            {
                XmlDocument xDoc = GetXmlDom();
                XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
                foreach (XmlNode xns in nlst)  // 遍历所有子节点
                {
                    if (xns.Name == xmlParameter.Name && xns.InnerText == xmlParameter.InnerText)
                    {
                        SetAttribute((XmlElement)xns, attributeParameters);
                        break;
                    }
                    XmlNode tmp = GetNode(xns, xmlParameter);
                    if (tmp != null)
                    {
                        SetAttribute((XmlElement)tmp, attributeParameters);
                        break;
                    }
                }
                xDoc.Save(_xPath);
            }
            ///
            /// 修改属性值
            ///
            /// XML参数
            /// 新属性值
            public static void SetAttribute(XmlParameter xmlParameter, string attributeName, string attributeValue)
            {
                XmlDocument xDoc = GetXmlDom();
                XmlNodeList nlst = xDoc.DocumentElement.ChildNodes;
                foreach (XmlNode xns in nlst)  // 遍历所有子节点
                {
                    if (xns.Name == xmlParameter.Name && xns.InnerText == xmlParameter.InnerText)
                    {
                        ((XmlElement)xns).SetAttribute(attributeName, attributeValue);
                        break;
                    }
                    XmlNode tmp = GetNode(xns, xmlParameter);
                    if (tmp != null)
                    {
                        ((XmlElement)tmp).SetAttribute(attributeName, attributeValue);
                        break;
                    }
                }
                xDoc.Save(_xPath);
            }
            #endregion
        }

    }



    http://yunpan.cn/Q7czcYTwE8qkc  提取码 545c

  • 相关阅读:
    Python 爬虫简介
    Python 线程池(小节)
    Python platform 模块
    Python term 模块
    python 统计使用技巧
    ArcGIS中的WKID(转)
    c#二维码资料
    How to remove live visual tree?
    新书预告 ArcGIS跨平台开发系列第一本
    visual studio 中删除多余的空白行
  • 原文地址:https://www.cnblogs.com/xulang/p/5506203.html
Copyright © 2020-2023  润新知