在C#程序中,DataSet不仅能够管理关系型数据,还可以非常方便地和XML格式互相转换。借助DataSet自带的ReadXml与WriteXml方法,我们不需要手动解析XML节点,就能把文件内容加载为数据表,或者把内存中的数据保存为XML文件。

使用ReadXml读取XML文件
ReadXml方法有多种重载形式,最常用的是直接传入文件路径或流对象。它会根据XML内容自动推断表结构,也可以配合XmlReadMode参数控制读取行为。
示例代码:从文件读取XML到DataSet
using System;
using System.Data;
using System.IO;
class Program
{
static void Main()
{
// 假设存在如下结构的XML文件:根节点为Data,内含多个Row节点
string xmlPath = "test.xml";
DataSet ds = new DataSet();
// 使用ReadXml读取文件,模式为自动推断
ds.ReadXml(xmlPath, XmlReadMode.Auto);
// 输出读取到的表名和行数
foreach (DataTable table in ds.Tables)
{
Console.WriteLine("表名: " + table.TableName + " 行数: " + table.Rows.Count);
foreach (DataRow row in table.Rows)
{
Console.WriteLine(row[0].ToString());
}
}
}
}
使用WriteXml写入XML文件
与ReadXml相对应,WriteXml可以把DataSet中的数据和架构保存为XML。如果不指定模式,默认只写数据;使用XmlWriteMode.WriteSchema可同时保存架构。
示例代码:将DataSet保存为XML
using System;
using System.Data;
class Program
{
static void Main()
{
DataSet ds = new DataSet("Demo");
DataTable dt = new DataTable("User");
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Rows.Add(1, "张三");
dt.Rows.Add(2, "李四");
ds.Tables.Add(dt);
// 写入XML文件并包含架构
ds.WriteXml("out.xml", XmlWriteMode.WriteSchema);
Console.WriteLine("已生成out.xml");
}
}
ReadXml的常见注意点
- 如果XML中包含命名空间,可能需要先处理再读取,否则表名可能带后缀。
- 当XML结构与预期不符时,可使用XmlReadMode.IgnoreSchema强制按数据填充。
- 读取前确保文件存在且有访问权限,否则会抛出FileNotFoundException。
小结
通过DataSet的ReadXml和WriteXml,C#开发者可以用极少的代码完成XML与内存数据的双向转换。理解读取模式与表结构推断规则,能让你在真实项目中更稳定地处理配置文件或数据交换文件。