HowToUseXmlDataDocument


One test is better that thousand words…


[TestFixture]


public class XmlDataDemo


{         


     [Test]


     public void LoadDataSet()


     {


           EmployeeDataSet ds = new EmployeeDataSet();


           ds.ReadXml(@”.\..\..\Employee.xml”);


           Assert.AreEqual(1,ds.employee.Rows.Count);     


     }


 


     [Test]


     public void XmlDataDoc()


     {              


           XmlDataDocument doc = new XmlDataDocument(new EmployeeDataSet());              


           doc.Load (@”.\..\..\Employee.xml”);                            


 


           XmlDocument d = UntypeAndModifyAge(doc, “22”);


                                                                                                          


           EmployeeDataSet ds2 = new EmployeeDataSet();


           ds2.ReadXml(CreateEmployeeValidatingReader(d.InnerXml));


           Assert.AreEqual(1,ds2.employee.Rows.Count);         


 


           Console.WriteLine(“After modify …..”);


           Console.WriteLine(ds2.GetXml());                               


     }


 


     [Test, ExpectedException(typeof(XmlSchemaException))]


     public void XmlDataDocValidatingException()


     {              


           XmlDataDocument doc = new XmlDataDocument(new EmployeeDataSet());              


           doc.Load (@”.\..\..\Employee.xml”);                            


           XmlDocument d = UntypeAndModifyAge(doc, “22a”);                                                                                          


                          


           EmployeeDataSet ds2 = new EmployeeDataSet();


           ds2.ReadXml(CreateEmployeeValidatingReader(d.InnerXml));            


     }


 


     private XmlValidatingReader CreateEmployeeValidatingReader(string xml)


     {


           XmlValidatingReader vr = new XmlValidatingReader(xml, XmlNodeType.Document, null);


           vr.ValidationEventHandler +=new System.Xml.Schema.ValidationEventHandler(vr_ValidationEventHandler);


           XmlSchemaCollection sc = new XmlSchemaCollection();


           sc.Add(“urn:rido.code/Employee”, new XmlTextReader(@”.\..\..\EmployeeDataSet.xsd”));


           vr.Schemas.Add(sc);


           return vr;          


     }


 


     private XmlDocument UntypeAndModifyAge(XmlDocument doc, string ageToModify)


     {


          


           ((XmlDataDocument)doc).DataSet.EnforceConstraints = false;


           doc.GetElementsByTagName(“Age”)[0].InnerText = ageToModify;


           ((XmlDataDocument)doc).DataSet.EnforceConstraints = true;                           


          


           string s = doc.InnerXml;


           XmlDocument result = new XmlDocument();


           result.LoadXml(s);


 


           Console.WriteLine(“modified from untyped…..”);    


           Console.WriteLine(s);


           return result;


     }


 


     [Test]


     public void LoadDataSetWithBadNamespace()


     {


           EmployeeDataSet ds = new EmployeeDataSet();               


           ds.ReadXml(@”.\..\..\EmployeeNoNs.xml”);


           Assert.AreEqual(0,ds.employee.Rows.Count);     


     }


 


     [Test]


     public void LoadDataSetWithBadXml()


     {


           EmployeeDataSet ds = new EmployeeDataSet();               


           ds.ReadXml(@”.\..\..\XmlFile1.xml”);


           Assert.AreEqual(0,ds.employee.Rows.Count);


    


     }


 


     private void vr_ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs e)


     {


           //Assert.Fail(e.Message);           


           throw e.Exception;


     }


}


<?xml version=”1.0″ encoding=”utf-8″ ?>


<xs:schema id=”EmployeeDataSet” targetNamespace=”urn:rido.code/Employee” elementFormDefault=”qualified”


     attributeFormDefault=”qualified” xmlns=”urn:rido.code/Employee” xmlns:mstns=”urn:rido.code/Employee”


     xmlns:xs=”http://www.w3.org/2001/XMLSchema” xmlns:msdata=”urn:schemas-microsoft-com:xml-msdata”>


     <xs:element name=”EmployeeDataSet” msdata:IsDataSet=”true”>


          <xs:complexType>


               <xs:sequence>


                    <xs:element name=”employee” type=”Employee” minOccurs=”1″ />


               </xs:sequence>


          </xs:complexType>


     </xs:element>


     <xs:complexType name=”Employee”>


          <xs:sequence>


               <xs:element name=”Name” type=”xs:string” minOccurs=”0″ />


               <xs:element name=”Age” type=”xs:int” minOccurs=”0″ />


          </xs:sequence>


     </xs:complexType>


</xs:schema>


 


<?xml version=”1.0″ encoding=”utf-8″ ?>


<EmployeeDataSet xmlns=”urn:rido.code/Employee”>


     <employee>


          <Name>rido</Name>


          <Age>33</Age>


     </employee>


</EmployeeDataSet>

Comments (0)