Create an XSD Schema….without knowing a darn thing about XSD.
Back in the old days, when dinosaurs roamed the earth, developers wanting to exchange data between applications used binary formatted data, hard-coded text field lengths, or delimited text files. Much parsing and error checking was involved. It was tedious.
With XML files a lot of that work can be done automatically… with one major drawback: You have to learn yet another 'language': XSD.
I don't know about you, but I feel the need to limit the amount of knowledge being poured into my brain on a daily basis… lest something gives (there is a fire-hose teacup analogy in there somewhere).
Here is how to create XML Schemas using classes in the .Net framework without knowing anything about XSD:
protected void Button1_Click(object sender, EventArgs e)
{ // The DataSet name becomes the root XML elementDataSet MyDataSet = new DataSet("Golfers");
// This can be confusing, the 'DataTable' will actually // become Elements (Rows) in the XML file.DataTable MyDataTable = new DataTable("Golfer");
MyDataSet.Tables.Add(MyDataTable);
// Make columns attributes so we can // link directly to a GridViewMyDataTable.Columns.Add(new DataColumn("ID",
typeof(System.Int32),
null, MappingType.Attribute));MyDataTable.Columns.Add(new DataColumn("Name",
typeof(String),
null, MappingType.Attribute));MyDataTable.Columns.Add(new DataColumn("Birthday",
typeof(DateTime),
null, MappingType.Attribute)); // Write out the XSD MyDataSet.WriteXmlSchema(@"C:\GolfersSchema.xsd"); // Put some data in the table DataRow TempRow;TempRow = MyDataTable.NewRow();
TempRow["ID"] = 1;TempRow["Name"] = "Bobby Jones";
TempRow["Birthday"] = new DateTime(1902, 3, 17);
MyDataTable.Rows.Add(TempRow);
TempRow = MyDataTable.NewRow();
TempRow["ID"] = 2;TempRow["Name"] = "Sam Snead";
TempRow["Birthday"] = new DateTime(1912, 5, 27);
MyDataTable.Rows.Add(TempRow);
TempRow = MyDataTable.NewRow();
TempRow["ID"] = 3;TempRow["Name"] = "Tiger Woods";
TempRow["Birthday"] = new DateTime(1975, 12, 30);
MyDataTable.Rows.Add(TempRow);
// Write out the data MyDataSet.WriteXml(@"C:\Golfers.xml");}
Here is how the data is saved, not bad eh?
<?xml version="1.0" standalone="yes"?>
<Golfers>
<Golfer ID="1" Name="Bobby Jones" Birthday="1902-03-17T00:00:00-05:00" />
<Golfer ID="2" Name="Sam Snead" Birthday="1912-05-27T00:00:00-05:00" />
<Golfer ID="3" Name="Tiger Woods" Birthday="1975-12-30T00:00:00-06:00" />
</Golfers>
Here is what the Schema looks like. Note, you can always go into the schema and tweak things.
<?xml version="1.0" standalone="yes"?>
<xs:schema id="Golfers" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Golfers" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Golfer">
<xs:complexType>
<xs:attribute name="ID" type="xs:int" />
<xs:attribute name="Name" type="xs:string" />
<xs:attribute name="Birthday" type="xs:dateTime" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
Here is one way to validate the XML against the Schema:
protected void Button2_Click(object sender, EventArgs e)
{ // First, read in the XML schemaDataSet MyDataSet = new DataSet();
MyDataSet.ReadXmlSchema(@"C:\GolfersSchema.xsd"); // Now, read in the XML file (it is validated // against the schema when it is read in). MyDataSet.ReadXml(@"C:\Golfers.xml"); // See how it looks in a GridViewGridView1.DataSource = MyDataSet;
GridView1.DataBind();
}
You can test the validation by modifying the XML file and trying to read it:
<Golfer ID="abc" Name="Tiger Woods" Birthday="1975-12-30...
When the XML file is read, an exception will be generated. Without the XSD validation, the XML file is loaded without error.
I hope you find this useful.
Steve Wellens
By the way, Microsoft had an event for U of M graduates at Brit's Pub in Minneapolis, Minnesota last night. It was a great success. There was good food and great beer. In the drawing for prizes, the big ticket item, an Xbox 360, was won by the only female graduate in attendance…congratulations!
I got this pen :)