Export (0) Print
Expand All

XmlValidatingReader.ValidationType Property

Gets a value describing what type of validation to perform.

[Visual Basic]
Public Property ValidationType As ValidationType
[C#]
public ValidationType ValidationType {get; set;}
[C++]
public: __property ValidationType get_ValidationType();
public: __property void set_ValidationType(ValidationType);
[JScript]
public function get ValidationType() : ValidationType;
public function set ValidationType(ValidationType);

Property Value

One of the ValidationType values. If this property is not set, it defaults to ValidationType.Auto.

Exceptions

Exception Type Condition
InvalidOperationException Setting the property after a Read has been called.

Remarks

This property must be set before the first call to Read. Setting this property to ValidationType.None creates a non-validating reader.

If external DTDs or schemas are needed for validation, the XmlResolver is used.

Refer to Validation of XML with XmlValidatingReader and Validation Types of the XmlValidatingReader for more information.

Example

[Visual Basic, C#, C++] The following example validates two files.

[Visual Basic] 
Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema
Imports Microsoft.VisualBasic

Public Class Sample
    Private doc1 As String = "notValid.xml"
    Private doc2 As String = "cdDTD.xml"
    Private doc3 As String = "book1.xml"
    
    Private txtreader As XmlTextReader = Nothing
    Private reader As XmlValidatingReader = Nothing
    Private m_success As Boolean = True
    
    Public Sub New()
        '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.
    End Sub 'New
    
    Public Shared Sub Main()
        Dim validation As New Sample()
    End Sub 'Main
    
    Private Sub Validate(filename As String, vt As ValidationType)
        Try
            'Implement the readers.  Set the ValidationType.
            txtreader = New XmlTextReader(filename)
            reader = New XmlValidatingReader(txtreader)
            reader.ValidationType = vt
            
            'If the reader is set to validate, set the event handler.
            If vt = ValidationType.None Then
                Console.WriteLine(ControlChars.Cr & "Parsing XML file " & filename.ToString())
            Else
                Console.WriteLine(ControlChars.Cr & "Validating XML file " & filename.ToString())
                m_success = True
                'Set the validation event handler.
                AddHandler reader.ValidationEventHandler, AddressOf ValidationCallBack
            End If
            
            ' Read XML data
            While reader.Read()
            End While 
            If vt = ValidationType.None Then
                Console.WriteLine("Finished parsing file.")
            Else
                Console.WriteLine("Validation finished. Validation {0}", IIf(m_success, "successful", "failed"))
            End If
        
        Finally
            'Close the reader.
            If Not (reader Is Nothing) Then
                reader.Close()
            End If
        End Try 
    End Sub 'Validate
    
    'Display the validation errors.
    Private Sub ValidationCallBack(sender As Object, args As ValidationEventArgs)
        m_success = False
        
        Console.Write(ControlChars.CrLf & ControlChars.Tab & "Validation error: " & args.Message)
    End Sub 'ValidationCallBack
End Class 'Sample

[C#] 
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

public class Sample
{
  private const String doc1 = "notValid.xml";
  private const String doc2 = "cdDTD.xml";
  private const String doc3 = "book1.xml";

  private XmlTextReader txtreader = null;
  private XmlValidatingReader reader = null;
  private Boolean m_success = true;

  public Sample ()
  {
      //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.

  }    

  public static void Main ()
  {
      Sample validation = new Sample();
  }

  private void Validate(String filename, ValidationType vt)
  {
    try
    {    
        //Implement the readers.  Set the ValidationType.
        txtreader = new XmlTextReader(filename);
        reader = new 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 " + filename.ToString());
        else{
           Console.WriteLine("\nValidating XML file " + filename.ToString());
           m_success = true;
           //Set the validation event handler.
           reader.ValidationEventHandler += new ValidationEventHandler (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==true ? "successful" : "failed"));
     }

     finally
     {
        //Close the reader.
        if (reader != null)
          reader.Close();
     } 

  }
  
  //Display the validation errors.
  private void ValidationCallBack (object sender, ValidationEventArgs args)
  {
     m_success = false;

     Console.Write("\r\n\tValidation error: " + args.Message);

  }
}

[C++] 
#using <mscorlib.dll>
#using <System.Xml.dll>
using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Schema;

public __gc class Sample
{

private:
   XmlTextReader* txtreader;
   XmlValidatingReader* reader;
   Boolean m_success;

public:
   Sample ()
   {
      txtreader = 0;
      reader = 0;
      m_success = true;
      String* doc1 = S"notValid.xml";
      String* doc2 = S"cdDTD.xml";
      String* doc3 = S"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 = new XmlTextReader(filename);
         reader = new XmlValidatingReader(txtreader);
         reader->ValidationType = vt;

         //If the reader is set to validate, set the event handler.
         if (vt==ValidationType::None)
            Console::WriteLine(S"\nParsing XML file {0}", filename);
         else{
            Console::WriteLine(S"\nValidating XML file {0}", filename);
            m_success = true;
            //Set the validation event handler.
            reader->ValidationEventHandler += new ValidationEventHandler (this, &Sample::ValidationCallBack);
         }

         // Read XML data
         while (reader->Read()){}

         if (vt==ValidationType::None)
            Console::WriteLine(S"Finished parsing file.");
         else
            Console::WriteLine (S"Validation finished. Validation {0}", m_success ? S"successful" : S"failed");
      }

      __finally
      {
         //Close the reader.
         if (reader != 0)
            reader->Close();
      } 

   }

   //Display the validation errors.
   void ValidationCallBack (Object* /*sender*/, ValidationEventArgs* args)
   {
      m_success = false;

      Console::Write(S"\r\n\tValidation error: {0}", args->Message);

   }
};

int main ()
{
   new Sample();
}

[Visual Basic, C#, C++] The sample uses the following four input files:

[Visual Basic, C#, C++] notValid.xml (The "x-schema:" prefix identifies the 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>

[Visual Basic, C#, C++] 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>

[Visual Basic, C#, C++] 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>

[JScript] No example is available for JScript. To view a Visual Basic, C#, or C++ example, click the Language Filter button Language Filter in the upper-left corner of the page.

Requirements

Platforms: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

See Also

XmlValidatingReader Class | XmlValidatingReader Members | System.Xml Namespace

Show:
© 2014 Microsoft