DataSet和DataTable都支持WriteXml()和ReadXml()方法,如果要使用ReadXml()方法读回数据,需要将WriteXml()方法的XmlWriteMode参数的值设置为 WriteSchema。
WriteXml(String, XmlWriteMode)
使用指定的文件和 XmlWriteMode 写入 DataTable 的当前数据和架构(可选)。 若要写入架构,请将 mode 参数的值设置为 WriteSchema。
使用一个窗口程序展示读写结果:
输出的XML文件内容如下:
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="XmlDemo" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="XmlDemo">
<xs:complexType>
<xs:sequence>
<xs:element name="id" msdata:AutoIncrement="true" type="xs:int" minOccurs="0" />
<xs:element name="item" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<XmlDemo>
<id>0</id>
<item>item 0</item>
</XmlDemo>
<XmlDemo>
<id>1</id>
<item>item 1</item>
</XmlDemo>
<XmlDemo>
<id>2</id>
<item>item 2</item>
</XmlDemo>
<XmlDemo>
<id>3</id>
<item>item 3</item>
</XmlDemo>
<XmlDemo>
<id>4</id>
<item>item 4</item>
</XmlDemo>
<XmlDemo>
<id>5</id>
<item>item 5</item>
</XmlDemo>
<XmlDemo>
<id>6</id>
<item>item 6</item>
</XmlDemo>
<XmlDemo>
<id>7</id>
<item>item 7</item>
</XmlDemo>
<XmlDemo>
<id>8</id>
<item>item 8</item>
</XmlDemo>
<XmlDemo>
<id>9</id>
<item>item 9</item>
</XmlDemo>
</NewDataSet>
程序代码如下:
/// <summary>
/// 创建并显示DataTable
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonBuildDataTable_Click(object sender, EventArgs e)
{
DataTable dt = this.CreateTestTable("XmlDemo");
this.dataGridView1.DataSource = dt;
}
/// <summary>
/// 输出DataTable到xml文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonWriteXml_Click(object sender, EventArgs e)
{
DataTable dt = this.dataGridView1.DataSource as DataTable;
dt.WriteXml("C:\\temp\\XmlDemo.xml", XmlWriteMode.WriteSchema);
this.dataGridView1.DataSource = null;
}
/// <summary>
/// 读取XML文件到DataTable,并重新显示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonReadXml_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.ReadXml("C:\\temp\\XmlDemo.xml");
this.dataGridView1.DataSource = dt;
}
/// <summary>
/// 构建DataTable示例数据,来源于MSDN
/// </summary>
/// <param name="tableName"></param>
/// <returns></returns>
private DataTable CreateTestTable(string tableName)
{
// Create a test DataTable with two columns and a few rows.
DataTable table = new DataTable(tableName);
DataColumn column = new DataColumn("id", typeof(System.Int32));
column.AutoIncrement = true;
table.Columns.Add(column);
column = new DataColumn("item", typeof(System.String));
table.Columns.Add(column);
// Add ten rows.
DataRow row;
for (int i = 0; i <= 9; i++)
{
row = table.NewRow();
row["item"] = "item " + i;
table.Rows.Add(row);
}
table.AcceptChanges();
return table;
}