DataTable 与XML 交互
一、将DataTable的内容写入到XML文件中
/// <summary> /// 将DataTable的内容写入到XML文件中 /// </summary> /// <param name="dt">数据源</param> /// <param name="address">XML文件地址</param> public static bool WriteToXml(DataTable dt, string address) { try { //如果文件DataTable.xml存在则直接删除 if (File.Exists(address)) { File.Delete(address); } XmlTextWriter writer = new XmlTextWriter(address, Encoding.GetEncoding("GBK")); writer.Formatting = Formatting.Indented; //XML文档创建开始 writer.WriteStartDocument(); writer.WriteComment("DataTable: " + dt.TableName); writer.WriteStartElement("DataTable"); //DataTable开始 writer.WriteAttributeString("TableName", dt.TableName); writer.WriteAttributeString("CountOfRows", dt.Rows.Count.ToString()); writer.WriteAttributeString("CountOfColumns", dt.Columns.Count.ToString()); writer.WriteStartElement("ClomunName", ""); //ColumnName开始 for (int i = 0; i < dt.Columns.Count; i++) { writer.WriteAttributeString( "Column" + i.ToString(), dt.Columns[i].ColumnName); } writer.WriteEndElement(); //ColumnName结束 //按行各行 for (int j = 0; j < dt.Rows.Count; j++) { writer.WriteStartElement("Row" + j.ToString(), ""); //打印各列 for (int k = 0; k < dt.Columns.Count; k++) { writer.WriteAttributeString( "Column" + k.ToString(), dt.Rows[j][k].ToString()); } writer.WriteEndElement(); } writer.WriteEndElement(); //DataTable结束 writer.WriteEndDocument(); writer.Close(); //XML文档创建结束 } catch (Exception ex) { Console.WriteLine(ex.Message); return false; } return true; } |
二、将以上述格式在XML中保存的信息读取到DataTable内
/// <summary> /// 从XML文件中读取一个DataTable /// </summary> /// <param name="dt">数据源</param> /// <param name="address">XML文件地址</param> /// <returns></returns> public static DataTable ReadFromXml(string address) { DataTable dt = new DataTable(); try { if (!File.Exists(address)) { throw new Exception("文件不存在!"); } XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(address); XmlNode root = xmlDoc.SelectSingleNode("DataTable"); //读取表名 dt.TableName = ((XmlElement)root).GetAttribute("TableName"); //Console.WriteLine("读取表名: {0}", dt.TableName); //读取行数 int CountOfRows = 0; if (!int.TryParse(((XmlElement)root). GetAttribute("CountOfRows").ToString(), out CountOfRows)) { throw new Exception("行数转换失败"); } //读取列数 int CountOfColumns = 0; if (!int.TryParse(((XmlElement)root). GetAttribute("CountOfColumns").ToString(), out CountOfColumns)) { throw new Exception("列数转换失败"); } //从第一行中读取记录的列名 foreach (XmlAttribute xa in root.ChildNodes[0].Attributes) { dt.Columns.Add(xa.Value); //Console.WriteLine("建立列: {0}", xa.Value); } //从后面的行中读取行信息 for (int i = 1; i < root.ChildNodes.Count; i++) { string[] array = new string[root.ChildNodes[0].Attributes.Count]; for (int j = 0; j < array.Length; j++) { array[j] = root.ChildNodes[i].Attributes[j].Value.ToString(); } dt.Rows.Add(array); //Console.WriteLine("行插入成功"); } } catch (Exception ex) { Console.WriteLine(ex.Message); return new DataTable(); } return dt; } |
三、Main函数调用
static void Main(string[] args) { //1.将DataTable内容写入到XML文件 //建立DataTable取名Table4Test DataTable dt1 = new DataTable("Table4Test"); //生成四列,列名为Column0-3 dt1.Columns.Add("Column0"); dt1.Columns.Add("Column1"); dt1.Columns.Add("Column2"); dt1.Columns.Add("Column3"); //生成四行 dt1.Rows.Add("A0", "A1", "A2", "A3"); dt1.Rows.Add("B0", "B1", "B2", "B3"); dt1.Rows.Add("C0", "C1", "C2", "C3"); //写入到XML if (WriteToXml(dt1, "DataTable.xml")) { Console.WriteLine("写入成功"); } //================================ //2.从XML文件中读取内容到DataTable //读取信息 DataTable dt2 = ReadFromXml("DataTable.xml"); //输出读取的信息 Console.WriteLine("读取到的信息:"); for (int i = 0; i < dt2.Rows.Count; i++) { for (int j = 0; j < dt2.Columns.Count; j++) { Console.Write(dt2.Rows[i][j].ToString() + "\t"); } Console.WriteLine(); } Console.ReadLine(); } |
DataTable 与XML 交互的更多相关文章
- DataTable to byte[]、DataTable to XML(string)
DataTabe 对象在很多地方都会用到,特别是在Web Service.Socket等需网络传输的地方. 但是在有些地方,如果直接传递的话,程序可能会报告DataTable无法序列化错误. 解决问题 ...
- C# datatable 与 xml文件之间的转换
/// <summary> /// datatable转XML文件 /// </summary> /// <param name="dtTable"& ...
- 使用WCF传输DataTable:DataTable和Xml格式的字符串相互转换(C#)
背景:项目中要用到客户端向服务端传数据,使用WCF,绑定webHttpBinding,做了一个小例子. 业务逻辑简介:客户端在a表中添加了几条数据,从SQL Server数据库直接取出新添加的数据(D ...
- 将Xml字符串转换成(DataTable || DataSet || XML)对象
今天用到一个功能:就是把从数据库读出来的内容转换成XML字符串流格式,并输出给一个功能函数.在写的过程,为方便以后的使用,我对这一功能进行分装.该类的具体格式如下:XmlConvert类命名空间:Ni ...
- DataTable ,XML和JSON相互转化
网上搜集的,保留下来了,有需要的拿去!private string DataTable2Xml(DataTable dt) { StringBuilder xmlBuilder = new Strin ...
- Zlib压缩算法在Java与Delphi间交互实现(压缩XML交互)
一个典型应用中,使用delphi作为客户端,J2EE服务端,两者之间用XML作为数据交换,为了提高效率,对XML数据进行压缩,为此需要找到一种压缩/解压算法能够两个平台之间交互处理,使用ZLIB算法就 ...
- 菜鸟必备教程,ajax与xml交互传输数据。
今天,公司让学习ajax,然而我并不会,着急到爆炸,boom~~啥卡拉咔.看着教程一步一步摸索,写出来交互页面,写代码真的好惆怅啊. 额,不说废话,下面是源代码. 首先是ajax的代码,注释真的很重要 ...
- C#中DataTable与XML格式的相互转换
1.DataTable转换成XML public string ConvertDataTableToXML(DataTable xmlDS) { MemoryStream stream = null; ...
- List实体类、DataTable与xml互转
序列化常用Attribute讲解说明 [XmlRootAttribute("MyCity", Namespace="abc.abc", IsNullable=f ...
随机推荐
- python文件调用方法
文件输入输出 open函数可以对文本文件进行读写的操作 基本形式: open(filename,mode) filename是文件名,可以写为绝对路径也可以是相对路径 mode是打开模式. open函 ...
- .Net平台技术栈?不止于此
首先援引一名工友几年前的文章:http://csharper.blog.51cto.com/3052247/1330022,结合当前微软技术领域及平台工具现状,文章有增改. .NET是个很大.很宽.很 ...
- Unity 阴影淡入淡出效果中Shader常量 unity_ShadowFadeCenterAndType和_LightShadowData的问题
由于Universal Render Pipeline目前(2020年4月1日)把阴影淡入淡出这个功能竟然给取消了…我自己拿片元位置到相机位置的距离进行了一个淡化,但是阴影边缘老是被裁切…后来研究了一 ...
- 硬不硬你说了算!35 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
每日一句英语学习,每天进步一点点: 前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 TCP 如初恋. 遥想小林 ...
- 数据库连接JOIN
1,连接类型及差异 INNER JOIN:结果集只有配对成功的数据,即不包含左表或右表为空的情况: OUTER JOIN: LEFT JOIN:结果包含左表的所有记录,右表不能成功匹配的显示NULL ...
- RADI
一.RADI分类 radi0: 优势:读性能提升,磁盘利用率百分百 缺点:没有容错,坏一个全坏.写性能下降 radi1 优势:有容错能力 缺点:消耗磁盘 radi5 优势:有容错能力,读写能力提升 缺 ...
- 爬虫简介和requests模块
目录 爬虫介绍 requests模块 requests模块 1.requests模块的基本使用 2.get 请求携带参数,调用params参数,其本质上还是调用urlencode 3.携带header ...
- 如何将MagicaVoxel模型导入UE4中(2)
前言 当可以把MagicaVoxel的静态模型导入到UE4后,我又开始不满足了.默认第三人称蓝图的"汽车碰撞人偶(雾)"与场景中的体素画风格格不入,于是,我便想着用自己建造的体素画 ...
- Java8 学习笔记--函数式接口
通过之前的函数式接口与lambda表达式的关系那篇文章,大家应该对函数式接口有了一定的了解了,在Java中它是lambda表达式的基础,没有函数式接口就没有办法使用lambda表达式. 函数式接口如此 ...
- (二) vim的Tabbar插件
关闭Tabbar中一个buffer的技巧: 如果你使用Tabbar的同时还集成了某种窗口分割插件(如 Winmanager,NERDTree)或者vim处于分栏显示状态,这时你想用传统的 :bd 或 ...