Freigeben über


XmlValidatingReader.ValidationEventHandler-Ereignis

Legt einen Ereignishandler für den Empfang von Informationen über Validierungsfehler von DTDs (Dokumenttypdefinition), XDR (XML-Data Reduced)-Schemas und XSD (XML Schema Definition Language)-Schemas fest.

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

Syntax

'Declaration
Public Event ValidationEventHandler As ValidationEventHandler
'Usage
Dim instance As XmlValidatingReader
Dim handler As ValidationEventHandler

AddHandler instance.ValidationEventHandler, handler
public event ValidationEventHandler ValidationEventHandler
public:
event ValidationEventHandler^ ValidationEventHandler {
    void add (ValidationEventHandler^ value);
    void remove (ValidationEventHandler^ value);
}
/** @event */
public void add_ValidationEventHandler (ValidationEventHandler value)

/** @event */
public void remove_ValidationEventHandler (ValidationEventHandler value)
JScript unterstützt die Verwendung von Ereignissen, aber nicht die Deklaration von neuen Ereignissen.

Hinweise

Hinweis

Die XmlValidatingReader-Klasse ist in Microsoft .NET Framework, Version 2.0 veraltet. Sie können eine Instanz eines validierenden XmlReader mithilfe der XmlReaderSettings-Klasse und der Create-Methode erstellen. Weitere Informationen finden Sie unter Validieren von XML-Daten mit "XmlReader".

Diese Ereignisse treten während Read ein, jedoch nur, wenn als ValidationType DTD, XDR, Schema oder Auto angegeben ist.

Wenn kein Ereignishandler bereitgestellt wurde, wird beim ersten Validierungsfehler eine XmlException ausgelöst (Schweregrad ist gleich XmlSeverityType.Error).

Hinweis

Wenn ein Element einen Validierungsfehler meldet, wird das Inhaltsmodell für dieses Element nicht weiter überprüft. Die untergeordneten Elemente werden jedoch überprüft. Der Reader meldet für ein angegebenes Element nur den ersten Fehler.

Der Rückrufhandler kann mithilfe der ValidationEventArgs.Severity-Eigenschaft sicherstellen, dass ein Dokument einer XML-Instanz anhand des Schemas validiert wird. Die Severity-Eigenschaft ermöglicht die Unterscheidung zwischen Validierungsfehlern (Schweregrad ist gleich XmlSeverityType.Error), die einen schwerwiegenden Fehler angeben, und Überprüfungswarnungen (Schweregrad ist gleich XmlSeverityType.Warning), die angeben, dass keine Schemainformationen verfügbar sind.

Beispiel

Im folgenden Beispiel wird eine Datei anhand eines XSD (XML Schema Definition)-Schemas validiert.

Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema
Imports Microsoft.VisualBasic

Public Class Sample
    
    Private txtreader As XmlTextReader = Nothing
    Private reader As XmlValidatingReader = Nothing
    Private m_success As Boolean = True
    
    Public Sub New()
        'Validate file against the XSD schema. 
        'The validation should fail.
        Validate("notValidXSD.xml")
    End Sub 'New
    
    Public Shared Sub Main()
        Dim validation As New Sample()
    End Sub 'Main
    
    Private Sub Validate(filename As String)
        Try
            Console.WriteLine("Validating XML file " & filename.ToString())
            txtreader = New XmlTextReader(filename)
            reader = New XmlValidatingReader(txtreader)
            
            ' Set the validation event handler
            AddHandler reader.ValidationEventHandler, AddressOf Me.ValidationEventHandle
            
            ' Read XML data
            While reader.Read()
            End While
            Console.WriteLine("Validation finished. Validation {0}", IIf(m_success, "successful", "failed"))
        
        Finally
            'Close the reader.
            If Not (reader Is Nothing) Then
                reader.Close()
            End If
        End Try
    End Sub 'Validate
     
    'Display the validation error.
    Private Sub ValidationEventHandle(sender As Object, args As ValidationEventArgs)
        m_success = False
        Console.WriteLine(ControlChars.CrLf & ControlChars.Tab & "Validation error: " & args.Message)
    End Sub 'ValidationEventHandle
End Class 'Sample
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

public class Sample
{

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

  public Sample ()
  {
        //Validate file against the XSD schema. 
        //The validation should fail.
        Validate("notValidXSD.xml"); 
  }    

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

  private void Validate(String filename)
  {    
     try
     {
        Console.WriteLine("Validating XML file " + filename.ToString());
        txtreader = new XmlTextReader (filename);
        reader = new XmlValidatingReader (txtreader);

        // Set the validation event handler
        reader.ValidationEventHandler += new ValidationEventHandler (this.ValidationEventHandle);

        // Read XML data
        while (reader.Read()){}
        Console.WriteLine ("Validation finished. Validation {0}", (m_success==true ? "successful" : "failed"));
     }

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

  //Display the validation error.
  private void ValidationEventHandle (object sender, ValidationEventArgs args)
  {
     m_success = false;
     Console.WriteLine("\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;
      
      //Validate file against the XSD schema. 
      //The validation should fail.
      Validate( "notValidXSD.xml" );
   }


private:
   void Validate( String^ filename )
   {
      try
      {
         Console::WriteLine( "Validating XML file {0}", filename );
         txtreader = gcnew XmlTextReader( filename );
         reader = gcnew XmlValidatingReader( txtreader );
         
         // Set the validation event handler
         reader->ValidationEventHandler += gcnew ValidationEventHandler( this, &Sample::ValidationEventHandle );
         
         // Read XML data
         while ( reader->Read() )
         {}
         Console::WriteLine( "Validation finished. Validation {0}", (m_success == true ? (String^)"successful" : "failed") );
      }
      finally
      {
         
         //Close the reader.
         if ( reader != nullptr )
                  reader->Close();
      }

   }


   //Display the validation error.
   void ValidationEventHandle( Object^ /*sender*/, ValidationEventArgs^ args )
   {
      m_success = false;
      Console::WriteLine( "\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 XmlTextReader txtReader = null;
    private XmlValidatingReader reader = null;
    private boolean mSuccess = true;

    public Sample()
    {
        //Validate file against the XSD schema. 
        //The validation should fail.
        Validate("notValidXSD.xml");
    } //Sample

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

    private void Validate(String filename)
    {
        try {
            Console.WriteLine(("Validating XML file " + filename.ToString()));
            txtReader = new XmlTextReader(filename);
            reader = new XmlValidatingReader(txtReader);

            // Set the validation event handler
            reader.add_ValidationEventHandler(new ValidationEventHandler
                (this.ValidationEventHandle));

            // Read XML data
            while(reader.Read()) {

            }
            Console.WriteLine("Validation finished. Validation {0}",
                (mSuccess == true) ? "successful" : "failed");
        }
        finally {
            //Close the reader.
            if (reader != null) {
                reader.Close();
            }
        }
    } //Validate

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

Im Beispiel werden die folgenden beiden Eingabedateien verwendet:

notValidXSD.xml (Das xsi:schemaLocation-Attribut kennzeichnet das XML-Schema für den Reader.)

<?xml version='1.0'?>
<bookstore xmlns="urn:bookstore-schema"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="urn:bookstore-schema books.xsd">
  <book>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
  </book>
  <book genre="novel">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
</bookstore>

books.xsd

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="urn:bookstore-schema"
    elementFormDefault="qualified"
    targetNamespace="urn:bookstore-schema">

 <xsd:element name="bookstore" type="bookstoreType"/>

 <xsd:complexType name="bookstoreType">
  <xsd:sequence maxOccurs="unbounded">
   <xsd:element name="book"  type="bookType"/>
  </xsd:sequence>
 </xsd:complexType>

 <xsd:complexType name="bookType">
  <xsd:sequence>
   <xsd:element name="title" type="xsd:string"/>
   <xsd:element name="author" type="authorName"/>
   <xsd:element name="price"  type="xsd:decimal"/>
  </xsd:sequence>
  <xsd:attribute name="genre" type="xsd:string"/>
 </xsd:complexType>

 <xsd:complexType name="authorName">
  <xsd:sequence>
   <xsd:element name="first-name"  type="xsd:string"/>
   <xsd:element name="last-name" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>

</xsd:schema>

Plattformen

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 unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

XmlValidatingReader-Klasse
XmlValidatingReader-Member
System.Xml-Namespace
XmlSeverityType

Weitere Ressourcen

Lesen von XML mit dem "XmlReader"