C# XML操作

1.XML帮助类

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Data.SqlClient;
using System.Data;
using System.IO;
using System.Xml.Serialization;

namespace AutoO2O.Common
{
    public class XmlHelper : XmlDocument
    {
        public string filePath = string.Empty;      

        public XmlHelper()
        {

        }

        public XmlHelper(string FilePath)
        {
            this.filePath = FilePath;
            this.Load(FilePath);
        }

        /// <summary>
        /// 创建根
        /// </summary>
        /// <param name="RootNodeName"></param>
        public void NewDocument(string RootNodeName)
        {
            XmlElement root = this.CreateElement(RootNodeName);
            this.AppendChild(root);
        }

        /// <summary>
        /// 新建一个节点
        /// </summary>
        /// <param name="Name"></param>
        /// <param name="Value"></param>
        /// <returns></returns>
        public XmlNode NewNode(XmlNode parent, string Name, string Value)
        {
            XmlNode node = this.CreateNode(XmlNodeType.Element, Name, "");
            XmlNode node1 = this.CreateNode(XmlNodeType.Text, Name, "");
            node1.Value = Value;

            node.AppendChild(node1);

            parent.AppendChild(node);

            return node;
        }

        /// <summary>
        /// 新建一个节点
        /// </summary>
        /// <param name="Name"></param>
        /// <param name="Value"></param>
        /// <param name="MyType"></param>
        /// <returns></returns>
        public XmlNode NewNode(XmlNode parent, string Name, string Value, XmlNodeType MyType)
        {
            XmlNode node = this.CreateNode(XmlNodeType.Element, Name, "");
            XmlNode node1 = this.CreateNode(MyType, Name, "");
            node1.Value = Value;

            node.AppendChild(node1);
            parent.AppendChild(node);

            return node;
        }

        /// <summary>
        /// 新建多个节点
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="data"></param>
        public void NewNode(XmlNode parent, Dictionary<string, string> data)
        {
            foreach (string key in data.Keys)
            {
                XmlNode node = this.CreateNode(XmlNodeType.Element, key, "");
                XmlNode node1 = this.CreateNode(XmlNodeType.Text, key, "");
                node1.Value = data[key];

                node.AppendChild(node1);

                parent.AppendChild(node);
            }
        }

        /// <summary>
        /// 新建多个节点
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="data"></param>
        public void NewNode(XmlNode parent, Dictionary<string, string> data, XmlNodeType MyType)
        {
            foreach (string key in data.Keys)
            {
                XmlNode node = this.CreateNode(XmlNodeType.Element, key, "");
                XmlNode node1 = this.CreateNode(MyType, key, "");
                node1.Value = data[key];

                node.AppendChild(node1);

                parent.AppendChild(node);
            }
        }

        /// <summary>
        /// 新建多个节点,并添加属性
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="data"></param>
        public void NewNode(XmlNode parent, Dictionary<string, string> data, List<Dictionary<string, string>> attributes)
        {
            int i = 0;
            foreach (string key in data.Keys)
            {
                XmlNode node = this.CreateNode(XmlNodeType.Element, key, "");
                XmlNode node1 = this.CreateNode(XmlNodeType.Text, key, "");
                node1.Value = data[key];

                node.AppendChild(node1);

                Dictionary<string, string> attr = attributes[i++];
                this.NewAttributes(node, attr);

                parent.AppendChild(node);
            }
        }

        /// <summary>
        /// 添加属性
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="Name"></param>
        /// <param name="Value"></param>
        public void NewAttributes(XmlNode parent, string Name, string Value)
        {
            XmlAttribute attr = this.CreateAttribute(Name);
            attr.Value = Value;

            parent.Attributes.Append(attr);
        }

        /// <summary>
        /// 添加属性
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="Name"></param>
        /// <param name="Value"></param>
        public void NewAttributes(XmlNode parent, Dictionary<string, string> data)
        {
            foreach (string key in data.Keys)
            {
                XmlAttribute attr = this.CreateAttribute(key);
                attr.Value = data[key];

                parent.Attributes.Append(attr);
            }
        } 

        /// <summary>
        /// 返回数据集
        /// </summary>
        /// <returns></returns>
        public DataSet getDataSet()
        {
            DataSet ds = new DataSet();
            XmlNodeReader xnr = new XmlNodeReader(this);
            ds.ReadXml(xnr);
            if (ds.Tables.Count == 0)
                return null;

            return ds;
        }

        /// <summary>
        /// 节点转DataSet
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        public DataSet ConvertToDataSet(XmlNode node)
        {
            if (node == null) return null;
            DataSet ds = new DataSet();
            XmlNodeReader xnr = new XmlNodeReader(node);
            ds.ReadXml(xnr);
            return ds;
        }

        #region 序列化XML文件
        /// <summary> 
        /// 序列化XML文件 
        /// </summary> 
        /// <param name="type">类型</param> 
        /// <param name="obj">对象</param> 
        /// <returns></returns> 
        public static string Serializer(Type type, object obj)
        {
            MemoryStream Stream = new MemoryStream();

            //创建序列化对象 
            XmlSerializer xml = new XmlSerializer(type);
            try
            {
                //序列化对象 
                xml.Serialize(Stream, obj);
            }
            catch (InvalidOperationException)
            {
                throw;
            }

            Stream.Position = 0;
            StreamReader sr = new StreamReader(Stream);
            string str = sr.ReadToEnd();

            return str;
        }
        #endregion

        #region 反序列化
        /// <summary> 
        /// 反序列化 
        /// </summary> 
        /// <param name="type">类型</param> 
        /// <param name="xml">XML字符串</param> 
        /// <returns></returns> 
        public static object Deserialize(Type type, string xml)
        {
            try
            {
                using (StringReader sr = new StringReader(xml))
                {
                    XmlSerializer xmldes = new XmlSerializer(type);
                    return xmldes.Deserialize(sr);
                }
            }
            catch (Exception e)
            {
                return null;
            }
        }
        #endregion
    }
}

2.Demo

static void Main(string[] args)
        {
            List<string> tempArray = new List<string>() { "孔明", "子龙", "CallmeYhz" };

            //创建XML字符串
            AutoO2O.Common.XmlHelper xmlHelper = new AutoO2O.Common.XmlHelper();
            xmlHelper.NewDocument("Items");          

            tempArray.ForEach((string str) =>
            {
                var node = xmlHelper.NewNode(xmlHelper.FirstChild, "Item", "");
                xmlHelper.NewAttributes(node, "Name", str);
            });

            //得到XML字符串
            string xmlStr = xmlHelper.OuterXml;
            Console.WriteLine("转化后的XML字符串为:"+xmlStr);
            Console.WriteLine("****************************************************************");
            string ids = string.Empty;
            //将XML字符串还原成元素
            xmlHelper.LoadXml(xmlStr);
     
            foreach (XmlNode item in xmlHelper.FirstChild.ChildNodes)
            {          
                ids += item.Attributes["Name"].Value + ",";
            }
            Console.WriteLine("还原后的元素为:"+ids);
            Console.ReadKey();



        }

3.结果

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 日志帮助类

     1.代码 using System; using System.Collections.Generic; using System.Linq; using S...

    用户1055830
  • C#实现Excel模板导出和从Excel导入数据

          午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 ? 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.O...

    用户1055830
  • C#中返回值封装

          在平时开发过程中常常需要取一个方法的返回值,BOSS写了一个返回值类,做个练习以备不时之需: 返回值支持泛型和非泛型 先贴上代码: 非泛型返回值类:...

    用户1055830
  • c# 发送Email的2中方式

    我相信大多数人发送邮件使用第二种,但是有时候第二种方式是发不出去的,那么什么情况发布出去呢???

    冰封一夏
  • [日常] 算法-单链表的创建-尾插法

    陶士涵
  • 【Go 语言社区】Go语言范围规则

    在任何编程程序的作用域,其中一个定义的变量可以有它的存在,超出该变量的区域就不能访问。有三个地方变量可以在Go编程语言声明如下: 内部函数或这就是所谓的局部变量...

    李海彬
  • 【安富莱二代示波器教程】第18章 附件C---波形拟合

    emWin5.44中新增的样条函数Spline可以实现波形拟合,即波形插补。不过当前可用于芯片的emWin库还没有升级到5.44,等升级到5.44后,大家可以做...

    armfly
  • 走进Java接口测试之简单解决写接口脏数据问题

    由此可见,这些事先创建好的测试数据( Out-of-box ),在测试用例执行的那个时刻,是否依然可用其实是不一定的,因为这些数据很有可能在被使用前已经发生了非...

    高楼Zee
  • 兔子跳铃铛(记原来写的一个游戏)

    前言     好几年没有写C++代码了,今天朋友问起一个C++的问题,我是怎么也想不起答案来了。哈哈。所以现在把原来在大二时候写过的一个C++游戏先写下来,要不...

    用户1172223
  • Vue组件-爬取页面表格中的数据并保存为csv文件

    实际开发过程中需要将前端以表格形式展示的数据保存为csv格式的文件,由于数据涉及到的种类比较多,格式化都是放在前端进行的,所以后端以接口下载的形式返回csv文件...

    从入门到进错门

扫码关注云+社区

领取腾讯云代金券