XmlValidatingReader::ValidationType Property

 

Gets or sets a value indicating the type of validation to perform.

Namespace:   System.Xml
Assembly:  System.Xml (in System.Xml.dll)

public:
property ValidationType ValidationType {
	ValidationType get();
	void set(ValidationType value);
}

Property Value

Type: System.Xml::ValidationType

One 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.

System_CAPS_noteNote

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>

.NET Framework
Available since 1.1
Return to top
Show: