I want to validate a string using an inline XML schema and want to handle XMLSchemaException. I tried the code below:
String parameter="<HostName>Arasanalu</HostName><AdminUserName>Administrator</AdminUserName>
<AdminPassword>A1234</AdminPassword><PlaceNumber>38</PlaceNumber>"
// Set the validation settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
settings.ValidationFlags |= XmlSchemaValidationFlags.AllowXmlAttributes;
//settings.Schemas.Add(null,"http://www.w3.org/2001/XMLSchema");
XmlSchemaSet sch = new XmlSchemaSet();
sch.Add(null,"http://www.w3.org/2001/XMLSchema");
try
{
// Create the XmlReader object.
XmlReader xmlrdr = XmlReader.Create(new StringReader("<root>" + parameter + "</root>"),
settings);
// Parse the file.
while (xmlrdr.Read());
}
catch (XmlSchemaValidationException ex)
{
Console.WriteLine("The file could not read the value at XML format is not correct due to" + ex);
}
I was getting the error "XMLException was unhandled" when passing an invalid parameter while (xmlrdr.Read());
. But I only want to handle XMLSchemaValidationException
. Please let me know how I can achive this.
You have to add an ValidationEventHandler
String parameter=@"<HostName>Arasanalu</HostName>
<AdminUserName>Administrator</AdminUserName>
<AdminPassword>A1234</AdminPassword>
<PlaceNumber>38</PlaceNumber>";
// Set the validation settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing= DtdProcessing.Parse;
settings.ValidationType = ValidationType.Schema;
settings.ValidationFlags = XmlSchemaValidationFlags.ProcessInlineSchema |
XmlSchemaValidationFlags.AllowXmlAttributes |
XmlSchemaValidationFlags.ReportValidationWarnings |
XmlSchemaValidationFlags.ProcessIdentityConstraints |
XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.Schemas.Add(null,XmlReader.Create(new StringReader(
@"<xs:schema xmlns:xs=""http://www.w3.org/2001/XMLSchema"">
<xs:element name=""root"">
<xs:complexType>
<xs:sequence>
<xs:element name=""HostName"" type=""xs:string"" />
<xs:element name=""AdminUserName"" type=""xs:string"" />
<xs:element name=""AdminPassword"" type=""xs:string"" />
<xs:element name=""PlaceNumber"" type=""xs:positiveInteger"" />
</xs:sequence>
</xs:complexType>
</xs:element></xs:schema>"), settings));
settings.ValidationEventHandler += (s,e) =>
{
throw new XmlSchemaValidationException(e.Message);
};
try
{
// Create the XmlReader object.
XmlReader xmlrdr = XmlReader.Create(
new StringReader("<root>" + parameter + "</root>"), settings);
// Parse the file.
while (xmlrdr.Read());
}
catch (XmlSchemaValidationException ex)
{
Console.WriteLine(
"The file could not read the value at XML format is not correct due to" + ex);
}