分享:C#自制XML操作工具代码,可用于接口通讯报文格式处理!

在编写各种通讯接口时,往往会遇到通讯报文的解析,这里分享一些关于xml处理的工具类代码!


 

public static XmlDocument CreateXML(string rootName)
        {
            XmlDocument xdoc = new XmlDocument();
            XmlDeclaration dec = xdoc.CreateXmlDeclaration("1.0", "utf-8", null);
            xdoc.AppendChild(dec);
            //创建一个根节点(一级)
            XmlElement root = xdoc.CreateElement(rootName);
            xdoc.AppendChild(root);
            return xdoc;            
        }

/// <summary>
        /// 读取数据
        /// </summary>
        /// <param name="path">路径</param>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param>
        /// <returns>string</returns>
        /**************************************************
         * 使用示列:
         * Read("/Node", "")
         * Read("/Node/Element[@Attribute='Name']", "Attribute")
         ************************************************/
        private string Read(string node, string attribute)
        {
            string value = "";
            try
            {                
                xn = doc.SelectSingleNode(node);
                value = (attribute.Equals("") ? xn.InnerText : xn.Attributes[attribute].Value);
            }
            catch { }
            return value;
        }
        /// <summary>
        /// 读取指定节点的串联值
        /// </summary>
        /// <param name="node">节点</param>
        /// <returns></returns>
        public string ReadByNode(string node)
        {
            return Read(node, "");
        }
        /// <summary>
        /// 读取指定属性的节点的串联值
        /// </summary>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名称</param>
        /// <param name="value">属性值</param>
        /// <returns></returns>
        public string ReadByAttribute(string node,string attribute,string value)
        {
            return Read(node + "[@" + attribute + "='" + value + "']", "");
        }
        /// <summary>
        /// 读取属性值
        /// </summary>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名称</param>
        /// <returns></returns>
        public string ReadAttributeValue(string node, string attribute)
        {
            return Read(node, attribute);
        }

 

        /// <summary>
        /// 插入数据
        /// </summary>        
        /// <param name="node">节点</param>
        /// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>
        /// <param name="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param>
        /// <param name="value">值</param>
        /// <returns></returns>
        /**************************************************
         * 使用示列:
         * Insert("/Node", "Element", "", "Value")
         * Insert("/Node", "Element", "Attribute", "Value")
         * Insert("/Node", "", "Attribute", "Value")
         ************************************************/
        private void Insert(string node, string element, string attribute, string value)
        {
            try
            {                
                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(path);
            }
            catch { }
        }

        /// <summary>
        /// 在节点中插入空元素
        /// </summary>
        /// <param name="node">节点</param>
        /// <param name="element">元素名</param>
        /**************************************
         * 
         * InsertElement("/Root", "Studio");
         * 
         *************************************/
        public void InsertElement(string node, string element)
        {
            Insert(node, element, "", "");
        }

        /// <summary>
        /// 在节点中插入带属性的元素
        /// </summary>
        /// <param name="node">节点</param>
        /// <param name="element">元素名</param>
        /// <param name="attribute">属性名</param>
        /// <param name="value">属性值</param>
        /**************************************
         * 
         * InsertAttribute("/Root/Studio", "Site", "Name", "XX工作室");
         * 
         *************************************/
        public void InsertElementAndAttribute(string node, string element, string attribute, string value)
        {
            Insert(node, element, attribute, value);
        }

        /// <summary>
        /// 在节点中插入带正文的元素
        /// </summary>
        /// <param name="node">节点</param>
        /// <param name="element">元素名</param>
        /// <param name="value">正文</param>
        /**************************************
         * 
         * InsertContent("/Root/Studio/Site[@Name='XX工作室']", "Master", "张总");
         * InsertContent("/Root/Studio", "Master", "张总");
         * 
         *************************************/
        public void InsertContent(string node, string element, string value)
        {
            Insert(node, element, "", value);
        }

        /// <summary>
        /// 在节点中插入属性
        /// </summary>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名</param>
        /// <param name="value">属性值</param>
        /**************************************
         * 
         * InsertAttribute("/Root/Studio/Site[@Name='XX工作室']", "Url", "http://www.XXX.com/");
         * InsertAttribute("/Root/Studio, "Url", "http://www.XXX.com/");
         * 
         *************************************/
        public void InsertAttribute(string node, string attribute, string value)
        {
            Insert(node, "", attribute, value);
        }

        /// <summary>
        /// 在节点中插入带属性带正文的元素
        /// </summary>
        /// <param name="node">节点</param>
        /// <param name="element">元素名</param>
        /// <param name="attribute">属性名</param>
        /// <param name="avalue">属性值</param>
        /// <param name="content">正文</param>
        public void InsertElementAndAttributeAndContent(string node, string element, string attribute, string avalue, string content)
        {
            try
            {
                xn = doc.SelectSingleNode(node);

                XmlElement xe = doc.CreateElement(element);
                xe.InnerText = content;
                xe.SetAttribute(attribute, avalue);
                xn.AppendChild(xe);

                //doc.Save(path);
            }
            catch { }
        }
        


        /// <summary>
        /// 修改数据
        /// </summary>        
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param>
        /// <param name="value">值</param>
        /// <returns></returns>
        /**************************************************
         * 使用示列:
         * Insert("/Node", "", "Value")
         * Insert("/Node", "Attribute", "Value")
         ************************************************/
        private void Update(string node, string attribute, string value)
        {
            try
            {
                xn = doc.SelectSingleNode(node);
                
                if (xn == null)
                {
                    string[] ele = node.Split('/');
                    InsertElement(ele[1], ele[ele.Length - 1]);
                    xn = doc.SelectSingleNode(node);
                }
                XmlElement xe = (XmlElement)xn;
                
                if (attribute.Equals(""))
                    xe.InnerText = value;
                else
                    xe.SetAttribute(attribute, value);
                //doc.Save(path);
            }
            catch { }
        }


        /// <summary>
        /// 删除数据
        /// </summary>        
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>
        /// <param name="value">值</param>
        /// <returns></returns>
        /**************************************************
         * 使用示列:
         * Delete("/Node", "")
         * Delete("/Node", "Attribute")
         ************************************************/
        private void Delete(string node, string attribute)
        {
            try
            {
                xn = doc.SelectSingleNode(node);
                XmlElement xe = (XmlElement)xn;
                if (attribute.Equals(""))
                    xn.ParentNode.RemoveChild(xn);
                else
                    xe.RemoveAttribute(attribute);
                //doc.Save(path);
            }
            catch { }
        }

 

 

        /// <summary>
        /// datatable转化为xml,生成对应的循环节点
        /// </summary>        
        /// <param name="dt">数据表</param>
        /// <param name="nodelist">循环节点</param>
        /// <param name="nodename">循环子节点名</param>
        /// <returns></returns>

 public XmlDocument DataTableToXml(DataTable dt,string nodelist,string nodename)
        {
            System.Text.StringBuilder strXml = new System.Text.StringBuilder();
            strXml.AppendLine("<" + nodelist + ">");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                strXml.AppendLine("<" + nodename + ">");
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    strXml.AppendLine("<" + dt.Columns[j].ColumnName + ">" + dt.Rows[i][j].ToString().Replace("&", "&amp;").Replace("<", "&lt;") + "</" + dt.Columns[j].ColumnName + ">");
                }
                strXml.AppendLine("</" + nodename + ">");
            }
            strXml.AppendLine("</" + nodelist + ">");


            //DeleteElement("//ebank//list");

            XmlDocument doc2 = new XmlDocument();
            doc2.LoadXml(strXml.ToString());

            XmlNode root1 = doc.SelectSingleNode("//ebank//" + nodelist);
            if (root1 == null)
            {
                XmlHelper xhe = new XmlHelper(doc);
                xhe.UpdateContent("/ebank/"+nodelist, "");
                doc = xhe.GetXmlDoc();
                root1 = doc.SelectSingleNode("//ebank//"+nodelist);
            }
            foreach (XmlNode n in doc2.DocumentElement.ChildNodes)
            {
                XmlNode root2 = doc.ImportNode(n, true);
                root1.AppendChild(root2);
            }


            return doc;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值