Writing XML Using DataSet in C#

I am currently upgrading my XML book that I wrote a decade ago to .NET 4.5 and you will be seeing many more articles on XML and .NET. A few days ago, I wrote How to Load XML File into a DataGridView Control and now here is the reverse method.

This article shows how to write DataSet contents to an XML file. The DataSet class contains methods to write a XML file from a DataSet object and fill the data to the file. 

The WriteXml Method 

The WriteXml method writes the current data (the schema and data) of a DataSet object to an XML file. This is an overloaded method. By using this method, you can write data to a file, stream, TextWriter, or XmlWriter.

The following code snippet writes a DataSet contents to a XML file using the WriteXml method:

DataSet ds = CreateDynamicDataSet();
ds.WriteXml(@"C:\Books\Students.xml"); 

Sample 

Create a Windows Forms or WPF application and add a Button control to the Form/Window. Write the following code snippet for the button control click event handler. 

The CreateDynamicDataSet method creates a DataSet object in-memory. If you already have data coming from a database, getting filled in a DataSet, you won't need this method. All you need to do is call the WriteXml method of your DataSet and pass the full path of the XML file. 

This example creates a DataSet, fills the data for the DataSet, and writes the data to an XML file. 

private void WriteXmlButton_Click(object sender, EventArgs e)
{
    DataSet ds = CreateDynamicDataSet();
    ds.WriteXml(@"C:\Books\Students.xml");
}

private DataSet CreateDynamicDataSet()
{

    DataSet ds = new DataSet("DS");
    ds.Namespace = "StdNamespace";
    DataTable stdTable = new DataTable("Student");
    DataColumn col1 = new DataColumn("Name");
    DataColumn col2 = new DataColumn("Address");
    stdTable.Columns.Add(col1);
    stdTable.Columns.Add(col2);
    ds.Tables.Add(stdTable);

    //Add student Data to the table
    DataRow newRow; newRow = stdTable.NewRow();
    newRow["Name"] = "Mahesh Chand";
    newRow["Address"] = "Meadowlake Dr, Dtown";
    stdTable.Rows.Add(newRow);
    newRow = stdTable.NewRow();

    newRow["Name"] = "Mike Gold";
    newRow["Address"] = "NewYork";
    stdTable.Rows.Add(newRow);
    newRow = stdTable.NewRow();
    newRow["Name"] = "Mike Gold";
    newRow["Address"] = "New York";

    stdTable.Rows.Add(newRow);

    ds.AcceptChanges(); 

    return ds;

}    

You wouldn't believe how much the WriteXml method can do for you. If you see the output Students.xml file, it generates a standard XML file that looks like the following.  

-<DS xmlns="StdNamespace">

- <Student>

  <Name>Mahesh Chand</Name>

  <Address>Meadowlake Dr, Dtown</Address>

  </Student>

- <Student>

  <Name>Mike Gold</Name>

  <Address>NewYork</Address>

  </Student>

- <Student>

  <Name>Mike Gold</Name>

  <Address>New York</Address>

  </Student>

 </DS>