Xml validation. Please help.
-
I want to validate an XML file through a schema.
<?xml version="1.0" encoding="utf-8" ?>
<Units>
<Unt Text="stuks" Service="False" Value="0" />
<Unit Text="km" Service="True" Value="1" />
</Units><?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Unit" targetNamespace="http://tempuri.org/Unit.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/Unit.xsd"
xmlns:mstns="http://tempuri.org/Unit.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:complexType name="UnitType">
<xs:attribute name="Text" type="xs:string" use="required" />
<xs:attribute name="Service" type="xs:boolean" use="required" />
<xs:attribute name="Value" type="xs:byte" use="required" />
</xs:complexType><xs:element name="Units">
xs:complexType
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="Unit" type="UnitType" />
</xs:sequence>
</xs:complexType>
</xs:element></xs:schema>
I use the following code :
Settings = new XmlReaderSettings();
Settings.ValidationType = ValidationType.Schema;
Settings.Schemas.Add("http://tempuri.org/Unit.xsd", Directory.GetCurrentDirectory() + strXmlSchema);
Settings.ValidationEventHandler += new ValidationEventHandler(OnSchemaValidationError);using (XmlReader Reader = XmlReader.Create(Directory.GetCurrentDirectory() + strXmlFile, Settings))
{
if (Reader != null)
{
XmlDocument Doc = new XmlDocument();
Doc.Load(Reader);
Reader.Close();
:
}
}My handler OnSchemaValidationError never gets called, even when there is clearly a mistake in my XML. Why ??
-
I want to validate an XML file through a schema.
<?xml version="1.0" encoding="utf-8" ?>
<Units>
<Unt Text="stuks" Service="False" Value="0" />
<Unit Text="km" Service="True" Value="1" />
</Units><?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Unit" targetNamespace="http://tempuri.org/Unit.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/Unit.xsd"
xmlns:mstns="http://tempuri.org/Unit.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:complexType name="UnitType">
<xs:attribute name="Text" type="xs:string" use="required" />
<xs:attribute name="Service" type="xs:boolean" use="required" />
<xs:attribute name="Value" type="xs:byte" use="required" />
</xs:complexType><xs:element name="Units">
xs:complexType
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name="Unit" type="UnitType" />
</xs:sequence>
</xs:complexType>
</xs:element></xs:schema>
I use the following code :
Settings = new XmlReaderSettings();
Settings.ValidationType = ValidationType.Schema;
Settings.Schemas.Add("http://tempuri.org/Unit.xsd", Directory.GetCurrentDirectory() + strXmlSchema);
Settings.ValidationEventHandler += new ValidationEventHandler(OnSchemaValidationError);using (XmlReader Reader = XmlReader.Create(Directory.GetCurrentDirectory() + strXmlFile, Settings))
{
if (Reader != null)
{
XmlDocument Doc = new XmlDocument();
Doc.Load(Reader);
Reader.Close();
:
}
}My handler OnSchemaValidationError never gets called, even when there is clearly a mistake in my XML. Why ??
I beleive you have to read the entire file in order for it to validate try this
Settings = new XmlReaderSettings();
Settings.ValidationType = ValidationType.Schema;
Settings.Schemas.Add("http://tempuri.org/Unit.xsd", Directory.GetCurrentDirectory() + strXmlSchema);
Settings.ValidationEventHandler += new ValidationEventHandler(OnSchemaValidationError);using (XmlReader Reader = XmlReader.Create(Directory.GetCurrentDirectory() + strXmlFile, Settings))
{
if (Reader != null)
{
while(Reader.Read()){}
}
}