XmlValidatingReader.ValidationType 属性

获取或设置一个值,该值指示要执行的验证的类型。

**命名空间:**System.Xml
**程序集:**System.Xml(在 system.xml.dll 中)

语法

声明
Public Property ValidationType As ValidationType
用法
Dim instance As XmlValidatingReader
Dim value As ValidationType

value = instance.ValidationType

instance.ValidationType = value
public ValidationType ValidationType { get; set; }
public:
property ValidationType ValidationType {
    ValidationType get ();
    void set (ValidationType value);
}
/** @property */
public ValidationType get_ValidationType ()

/** @property */
public void set_ValidationType (ValidationType value)
public function get ValidationType () : ValidationType

public function set ValidationType (value : ValidationType)

属性值

ValidationType 值之一。如果未设置此属性,则它默认为 ValidationType.Auto。

异常

异常类型 条件

InvalidOperationException

在调用了 Read 之后设置该属性。

备注

提示

XmlValidatingReader 类在 Microsoft .NET Framework 2.0 版 中已过时。您可以使用 XmlReaderSettings 类和 Create 方法创建一个验证 XmlReader 实例。有关更多信息,请参见 使用 XmlReader 验证 XML 数据

必须在对 Read 进行第一次调用之前设置此属性。将此属性设置为 ValidationType.None 会创建一个非验证读取器。

如果验证需要外部文档类型定义 (DTD) 或架构,则使用 XmlResolver

有关更多信息,请参见 使用 XmlValidatingReader 进行 XML 验证XmlValidatingReader 的验证类型

示例

下面的示例验证两个文件。

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
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);

  }
}
#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;
}
import System.*;
import System.IO.*;
import System.Xml.*;
import System.Xml.Schema.*;

public class Sample
{
    private String doc1 = "notValid.xml";
    private String doc2 = "cdDTD.xml";
    private String doc3 = "book1.xml";
    private XmlTextReader txtReader = null;
    private XmlValidatingReader reader = null;
    private boolean mSuccess = 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.
    } //Sample

    public static void main(String[] args)
    {
        Sample validation =  new Sample();
    } //main

    private void Validate(String fileName, ValidationType vt)
    {
        try {
            //Implement the readers.  Set the ValidationType.
            txtReader = new XmlTextReader(fileName);
            reader = new XmlValidatingReader(txtReader);
            reader.set_ValidationType(vt);

            //If the reader is set to validate, set the event handler.
            if (vt.Equals(ValidationType.None)) {
                Console.WriteLine("\nParsing XML file " 
                    + fileName.ToString());
            }
            else {
                Console.WriteLine("\nValidating XML file " 
                    + fileName.ToString());
                mSuccess = true;

                //Set the validation event handler.
                reader.add_ValidationEventHandler(new ValidationEventHandler
                    (ValidationCallBack));
            }
            // Read XML data
            while(reader.Read()) {

            } 
            if ( vt.Equals(ValidationType.None)) {
                Console.WriteLine("Finished parsing file.");
            }
            else {
                Console.WriteLine("Validation finished. Validation {0}",
                    (mSuccess == true) ? "successful" : "failed");
            }
        } 
        finally {
            //Close the reader.
            if (reader != null) {
                reader.Close();
            }
        }
    } //Validate

    //Display the validation errors.
    private void ValidationCallBack(Object sender, ValidationEventArgs args) 
    {
        mSuccess = false;
        Console.Write("\r\n\tValidation error: " + args.get_Message());
    } //ValidationCallBack 
} //Sample

此示例使用下列四个输入文件:

notValid.xml(“x-schema:”前缀标识读取器的 XML 数据简化 (XDR) 架构。)

<?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>

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

XmlValidatingReader 类
XmlValidatingReader 成员
System.Xml 命名空间

其他资源

用 XmlReader 读取 XML