An xml file is said to be valid if it is
validated successfully against a schema. It is a good practice to n validate a
xml file against a schema before the application starts consuming it. I want to
show how to do this programmatically using C#.
Below is the sample xml file and schema file
BookStore.xml::
<?xml version="1.0" encoding="utf-8"?>
<BookStore >
<Book ISBN="1224-43-21-2321">
<title>Oxford
Advanced Learners Dictionary</title>
<Authors>
<AuthorName>David
Nutshell</AuthorName>
</Authors>
<Price>530.00</Price>
</Book>
<Book ISBN="1223-13-45-6581">
<title>C# 3.0
Professional</title>
<Authors>
<AuthorName>Ken Thompson</AuthorName>
<AuthorName>Mark
Williams</AuthorName>
</Authors>
<Price>530.00</Price>
</Book>
</BookStore>
BookStore.xsd::
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:element name="BookStore" >
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="Authors">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="1"name="AuthorName" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Step by Step procedure to
validate a xml file against a schema
Step 1: Add the
namespace System.Xml. Create a instance for XmlDocument class.
Step 2: Add the schema
file to the XmlDocument instance.
Step 3: Load the
given xml file into the XmlDocument instance.
Step 4: Now call the
Validate method on XmlDocument instance passing the validateEventHandler event.
If any xml element is not configured as per the schema rule then this event will
be fired, assigning a severity to the violation.
Below is the code for this:
class xmlValidate
{
public static bool validXml
= true;
static void Main(string[]
args)
{
// step-1
XmlDocument XmlDoc
= new XmlDocument();
// step-2
XmlDoc.Schemas.Add(null,
@"c:\BookStore.xsd");
// step-3
XmlDoc.Load(@"c:\BookStore.Xml");
// step-4
XmlDoc.Validate(newSystem.Xml.Schema.ValidationEventHandler(xrs_ValidationEventHandler));
if(validXml
== true)
Console.WriteLine("valid
xml file");
else
Console.WriteLine("not
a valid xml file");
// clearing the flag
validXml= true;
}
static void xrs_ValidationEventHandler(object sender,
System.Xml.Schema.ValidationEventArgs e)
{
if (e.Severity
== System.Xml.Schema.XmlSeverityType.Error)
validXml = false;
}
}
Explanation:
Open a C# console application. Open the Program.cs file and delete the Program
class and copy the above code. Add the name space System.Xml. and also create
the above xml and schema files in C:\ drive. Compile the above code and run the
application.
Testing:
Case1: The above given xml is valid so “valid xml file” will be displayed on the
screen
Case2: now remove the attribute ISBN on any book element from the BookStore.xml
and run again. A “not a valid xml file ” will be displayed.