一、将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 交互的更多相关文章

  1. DataTable to byte[]、DataTable to XML(string)

    DataTabe 对象在很多地方都会用到,特别是在Web Service.Socket等需网络传输的地方. 但是在有些地方,如果直接传递的话,程序可能会报告DataTable无法序列化错误. 解决问题 ...

  2. C# datatable 与 xml文件之间的转换

    /// <summary> /// datatable转XML文件 /// </summary> /// <param name="dtTable"& ...

  3. 使用WCF传输DataTable:DataTable和Xml格式的字符串相互转换(C#)

    背景:项目中要用到客户端向服务端传数据,使用WCF,绑定webHttpBinding,做了一个小例子. 业务逻辑简介:客户端在a表中添加了几条数据,从SQL Server数据库直接取出新添加的数据(D ...

  4. 将Xml字符串转换成(DataTable || DataSet || XML)对象

    今天用到一个功能:就是把从数据库读出来的内容转换成XML字符串流格式,并输出给一个功能函数.在写的过程,为方便以后的使用,我对这一功能进行分装.该类的具体格式如下:XmlConvert类命名空间:Ni ...

  5. DataTable ,XML和JSON相互转化

    网上搜集的,保留下来了,有需要的拿去!private string DataTable2Xml(DataTable dt) { StringBuilder xmlBuilder = new Strin ...

  6. Zlib压缩算法在Java与Delphi间交互实现(压缩XML交互)

    一个典型应用中,使用delphi作为客户端,J2EE服务端,两者之间用XML作为数据交换,为了提高效率,对XML数据进行压缩,为此需要找到一种压缩/解压算法能够两个平台之间交互处理,使用ZLIB算法就 ...

  7. 菜鸟必备教程,ajax与xml交互传输数据。

    今天,公司让学习ajax,然而我并不会,着急到爆炸,boom~~啥卡拉咔.看着教程一步一步摸索,写出来交互页面,写代码真的好惆怅啊. 额,不说废话,下面是源代码. 首先是ajax的代码,注释真的很重要 ...

  8. C#中DataTable与XML格式的相互转换

    1.DataTable转换成XML public string ConvertDataTableToXML(DataTable xmlDS) { MemoryStream stream = null; ...

  9. List实体类、DataTable与xml互转

    序列化常用Attribute讲解说明 [XmlRootAttribute("MyCity", Namespace="abc.abc", IsNullable=f ...

随机推荐

  1. 【NLP面试QA】基本策略

    目录 防止过拟合的方法 什么是梯度消失和梯度爆炸?如何解决? 在深度学习中,网络层数增多会伴随哪些问题,怎么解决? 关于模型参数 模型参数初始化的方法 模型参数初始化为 0.过大.过小会怎样? 为什么 ...

  2. Java并发编程锁之独占公平锁与非公平锁比较

    Java并发编程锁之独占公平锁与非公平锁比较 公平锁和非公平锁理解: 在上一篇文章中,我们知道了非公平锁.其实Java中还存在着公平锁呢.公平二字怎么理解呢?和我们现实理解是一样的.大家去排队本着先来 ...

  3. 使用node.js中遇到的一些小bug

    1.BUG Cannot set headers after they are sent to the client 解决:即发出一次请求得到两次或以上的回应时会出现此警告,此时注意查看再在一些条件下 ...

  4. iOS 真机查看沙盒目录

    iExplorer 的方法试的时候设备都无法检测到,建议放弃 启用iTunes文件共享,才能够看沙盒内的文件,只需要在plist文件中添加如下信息: <key>UIFileSharingE ...

  5. 深入理解NIO(四)—— epoll的实现原理

    深入理解NIO(四)—— epoll的实现原理 本文链接:https://www.cnblogs.com/fatmanhappycode/p/12362423.html 终于来到最后了,万里长征只差最 ...

  6. elasticesearch搜索返回高亮关键字

    pre_tags 前缀标签 post_tags 后缀标签 tags_schema 设置为styled可以使用内置高亮样式 require_field_match 多字段高亮需要设置为false 使用h ...

  7. NKOJ3777 卡牌操作

    问题描述 有n张卡片在桌上一字排开,每张卡片上有两个数,第i张卡片上,正面的数为a[i],反面的数为b[i].现在,有m个熊孩子来破坏你的卡片了!第i个熊孩子会交换c[i]和d[i]两个位置上的卡片. ...

  8. PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)

    PTA数据结构与算法题目集(中文)  7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分)   在社交网络中,个人或单位(结点)之间通过某 ...

  9. 2017蓝桥杯日期问题(C++B组)

    标题:日期问题小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960年1月1日至2059年12月31日.令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的, ...

  10. javascript入门 之 zTree(十二 托拽事件(二))

    1.逻辑可能有不完善的地方,如果发现,请指出. <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - d ...