XmlValidatingReader::ValidationType Property
Gets or sets a value indicating the type of validation to perform.
Assembly: System.Xml (in System.Xml.dll)
public: property ValidationType ValidationType { ValidationType get(); void set(ValidationType value); }
Property Value
Type: System.Xml::ValidationTypeOne of the ValidationType values. If this property is not set, it defaults to ValidationType.Auto.
| Exception | Condition |
|---|---|
| InvalidOperationException | Setting the property after a Read has been called. |
Note |
|---|
The XmlValidatingReader class is obsolete in .NET Framework 2.0. You can create a validating XmlReader instance by using the XmlReaderSettings class and the Create method. For more information, see the Remarks section of the XmlReader reference page. |
This property must be set before the first call to Read. Setting this property to ValidationType.None creates a non-validating reader.
If external document type definitions (DTDs) or schemas are needed for validation, the XmlResolver is used.
The following example validates two files.
#using <System.Xml.dll> using namespace System; using namespace System::IO; using namespace System::Xml; using namespace System::Xml::Schema; public ref class Sample { private: XmlTextReader^ txtreader; XmlValidatingReader^ reader; Boolean m_success; public: Sample() { txtreader = nullptr; reader = nullptr; m_success = true; String^ doc1 = "notValid.xml"; String^ doc2 = "cdDTD.xml"; String^ doc3 = "book1.xml"; //Parse the files and validate when requested. Validate( doc1, ValidationType::XDR ); //Validation should fail. Validate( doc2, ValidationType::DTD ); //Validation should fail. Validate( doc3, ValidationType::None ); //No validation performed. } private: void Validate( String^ filename, ValidationType vt ) { try { //Implement the readers. Set the ValidationType. txtreader = gcnew XmlTextReader( filename ); reader = gcnew XmlValidatingReader( txtreader ); reader->ValidationType = vt; //If the reader is set to validate, set the event handler. if ( vt == ValidationType::None ) Console::WriteLine( "\nParsing XML file {0}", filename ); else { Console::WriteLine( "\nValidating XML file {0}", filename ); m_success = true; //Set the validation event handler. reader->ValidationEventHandler += gcnew ValidationEventHandler( this, &Sample::ValidationCallBack ); } // Read XML data while ( reader->Read() ) {} if ( vt == ValidationType::None ) Console::WriteLine( "Finished parsing file." ); else Console::WriteLine( "Validation finished. Validation {0}", m_success ? (String^)"successful" : "failed" ); } finally { //Close the reader. if ( reader != nullptr ) reader->Close(); } } //Display the validation errors. void ValidationCallBack( Object^ /*sender*/, ValidationEventArgs^ args ) { m_success = false; Console::Write( "\r\n\tValidation error: {0}", args->Message ); } }; int main() { gcnew Sample; }
The sample uses the following four input files:
notValid.xml (The "x-schema:" prefix identifies the XML-Data Reduced (XDR) schema for the reader.)
<?xml version='1.0'?> <bookstore xmlns="x-schema:schema1.xdr"> <book genre="novel" style="hardcover"> <title>The Handmaid's Tale</title> <author> <first-name>Margaret</first-name> <last-name>Atwood</last-name> </author> <price>19.95</price> </book> <book genre="novel" style="other"> <title>The Poisonwood Bible</title> <author> <first-name>Barbara</first-name> <last-name>Kingsolver</last-name> </author> <price>11.99</price> </book> </bookstore>
schema1.xdr
<?xml version="1.0"?> <Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes"> <ElementType name="first-name" content="textOnly"/> <ElementType name="last-name" content="textOnly"/> <ElementType name="name" content="textOnly"/> <ElementType name="price" content="textOnly" dt:type="fixed.14.4"/> <ElementType name="author" content="eltOnly" order="one"> <group order="seq"> <element type="name"/> </group> <group order="seq"> <element type="first-name"/> <element type="last-name"/> </group> </ElementType> <ElementType name="title" content="textOnly"/> <AttributeType name="genre" dt:type="string"/> <AttributeType name="style" dt:type="enumeration" dt:values="paperback hardcover"/> <ElementType name="book" content="eltOnly"> <attribute type="genre" required="yes"/> <attribute type="style" required="yes"/> <element type="title"/> <element type="author"/> <element type="price"/> </ElementType> <ElementType name="bookstore" content="eltOnly"> <element type="book"/> </ElementType> </Schema>
cdDTD.xml
<!--XML file using a DTD--> <!DOCTYPE bookstore [ <!ELEMENT bookstore (cd)*> <!ELEMENT cd (title,artist,price)> <!ATTLIST cd genre CDATA #REQUIRED> <!ELEMENT title (#PCDATA)> <!ELEMENT artist (#PCDATA)> <!ELEMENT price (#PCDATA)>]> <bookstore> <cd genre="alternative" ISBN="2-3631-4"> <title>Americana</title> <artist>Offspring</artist> <price>16.95</price> </cd> </bookstore>
book1.xml
<?xml version='1.0' ?> <!DOCTYPE book [<!ENTITY h 'hardcover'>]> <book> <title>Pride And Prejudice</title> <misc>&h;</misc> </book>
Available since 1.1
