Hi,
I am trying to validate the XML that I read into a DataSet using an XML schema (xsd). However, even though the xml file is invalid, I don't get any invalid xml exception. When I print the DataSet contents, it just skips the invalid entry, which is an element named "EmailAddress". In XML schema, the element name is "Email".
I tried setting EnforceConstraints field of the dataset before reading the XML. But I think it is not related with Schema. It does not change the behavior.
Here is my code:
Code:using System; using System.IO; using System.Data; using System.Xml; using System.Xml.Schema; namespace Trial { public class Program { static public void Main(String[] args) { var myDs = new DataSet(); myDs.ReadXmlSchema("../../AddressBook.xsd"); myDs.ReadXml("../../AddressBook.xml"); myDs.AcceptChanges(); myDs.WriteXml(Console.Out); foreach (DataTable table in myDs.Tables) { Console.WriteLine("Table {0} ==>", table.TableName); foreach (DataColumn column in table.Columns) { Console.WriteLine("Column {0}", column.ColumnName); } } } } }
Here are my xml and xsd files
Code:<?xml version="1.0"?> <!-- 06-xml/05-schema --> <AddressBook> <AddressBookEntry> <Name> <First>Niel</First> <Middle>M</Middle> <Last>Bornstein</Last> </Name> <Telephone Type="mobile"> <CountryCode>1</CountryCode> <AreaCode>404</AreaCode> <Exchange>784</Exchange> <Number>0696</Number> </Telephone> <EmailAddress>[email protected]</EmailAddress> </AddressBookEntry> <AddressBookEntry> <Name> <First>Edd</First> <Last>Dumbill</Last> </Name> <EmailAddress>[email protected]</EmailAddress> </AddressBookEntry> </AddressBook>Code:<?xml version="1.0"?> <!-- 06-xml/05-schema --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Name"> <xs:complexType> <xs:all> <xs:element name="First" type="xs:string" minOccurs="0" /> <xs:element name="Middle" type="xs:string" minOccurs="0" /> <xs:element name="Last" type="xs:string" minOccurs="0" /> </xs:all> </xs:complexType> </xs:element> <xs:element name="Telephone"> <xs:complexType> <xs:sequence> <xs:element name="CountryCode" type="xs:string" /> <xs:element name="AreaCode" type="xs:string" minOccurs="0" /> <xs:element name="Exchange" type="xs:string" minOccurs="0" /> <xs:element name="Number" type="xs:string" minOccurs="1"/> </xs:sequence> <xs:attribute name="Type" type="xs:string" use="required" /> </xs:complexType> </xs:element> <xs:element name="Email" type="xs:string" /> <xs:element name="AddressBookEntry"> <xs:complexType> <xs:sequence> <xs:element ref="Name" /> <xs:element ref="Telephone" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="Email" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="AddressBook"> <xs:complexType> <xs:sequence> <xs:element ref="AddressBookEntry" minOccurs="0" maxOccurs="unbounded" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>


Reply With Quote
