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 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

EF 通用数据层父类方法小结

注:该数据层方法为小弟平时项目所用方法,特此贡献出来,各位如有疑问或者好的建议可以提出来,大家一起成长!!!

771
来自专栏landv

excel_VB宏脚本_批量生成点餐宝接受的格式

1702
来自专栏Netkiller

Java 处理 Json 实例

本文介绍Java中如果处理Json。例如json编码与解码。以上节选自《Netkiller Java 手札》 第 5 章 Json 目录 5.1. Json 编...

3507
来自专栏哲学驱动设计

lambda表达式-编译测试

我不会IL,也不想学IL,所以为了测试Lambda表达式编译的原理,只能使用调试进行试验来认识: 第一种情况,当Lambda表达式没有用到函数外的变量时: cl...

2217
来自专栏菩提树下的杨过

Linq之ToDictionary<TSource, TKey, TElement>的写法

以前一直用 var query = xxx.Select(c=>new {c.X,c.Y}); 来取表中的某二列字段,今天有个应用需要转成Dictionary<...

21810
来自专栏Albert陈凯

2018-09-06 字符串中判断存在的几种模式和效率(string.contains、string.IndexOf、Regex.Match),stringregex

字符串中判断存在的几种模式和效率(string.contains、string.IndexOf、Regex.Match),stringregex

691
来自专栏Pulsar-V

C# 数据类型之String转byte[]

string类型转成byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str...

3125
来自专栏大内老A

谈谈你最熟悉的System.DateTime[上篇]

最近一直在负责公司内部框架的升级工作,今天对一个小问题进行了重新思考——时间的处理。具体来说,是如何有效地进行时间的处理以提供对跨时区的支持。对于一个分布式的应...

1919
来自专栏hbbliyong

C#基础知识回顾-- 反射(2)

使用反射调用方法: 一旦知道一个类型所支持的方法,就可以对方法进行调用。调用时,需使用包含在 MethodInfo中的Invoke()方法。调用形式: obje...

2624
来自专栏.NET开发者社区

.NET[C#]中实现实体对象深拷贝(克隆/复制)的几种方法

.NET[C#]中实现实体对象深拷贝(克隆/复制)的几种方法,总有一种适合你。 方式一 使用二进制流 using System; using System.IO...

2316

扫码关注云+社区

领取腾讯云代金券