Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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="https://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>