Validieren eines XML-Dokuments im DokumentobjektmodellValidating an XML Document in the DOM

Die Klasse XmlDocument validiert das XML-Dokument im DOM (Dokumentobjektmodell) standardmäßig nicht anhand eines XSD-Schemas (XML Schema Definition Language) oder einer DTD (Document Type Definition). Das XML-Dokument wird nur validiert, damit es wohlgeformt ist.TheXmlDocument class does not validate the XML in the Document Object Model (DOM) against an XML Schema definition language (XSD) schema or document type definition (DTD) by default; the XML is only verified to be well-formed.

Wenn Sie das XML-Dokument im DOM validieren möchten, können Sie es beim Laden in das DOM validieren, indem Sie einen schemavalidierenden XmlReader an die Load-Methode der XmlDocument-Klasse übergeben, oder Sie validieren ein zuvor nicht validiertes XML-Dokument im DOM mithilfe der Validate-Methode der XmlDocument-Klasse.To validate the XML in the DOM, you can validate the XML as it is loaded into the DOM by passing a schema-validating XmlReader to the Load method of the XmlDocument class, or validate a previously unvalidated XML document in the DOM using the Validate method of the XmlDocument class.

Validieren eines XML-Dokuments beim Laden in das DokumentobjektmodellValidating an XML Document As It Is Loaded into the DOM

Die XmlDocument-Klasse validiert die XML-Daten beim Laden in das DOM, wenn ein validierender XmlReader an die Load-Methode der XmlDocument-Klasse übergeben wird.The XmlDocument class validates the XML data as it is loaded into the DOM when a validating XmlReader is passed to the Load method of the XmlDocument class.

Nach erfolgreicher Validierung werden Schemastandards angewendet, Textwerte bei Bedarf in atomare Werte konvertiert und Typinformationen validierten Informationselementen zugeordnet.After successful validation, schema defaults are applied, text values are converted to atomic values as necessary, and type information is associated with validated information items. Daher werden zuvor nicht typisierte XML-Daten durch typisierte XML-Daten ersetzt.As a result, typed XML data replaces previously untyped XML data.

Erstellen eines "XmlReader" zum Validieren von XML-SchemataCreating an XML Schema-Validating XmlReader

Wenn Sie einen XmlReader zum Validieren von XML-Schemata erstellen möchten, führen Sie folgende Schritte aus:To create an XML schema-validating XmlReader, follow these steps.

  1. Erstellen Sie eine neue XmlReaderSettings-Instanz.Construct a new XmlReaderSettings instance.

  2. Fügen Sie der Schemas-Eigenschaft der XmlReaderSettings-Instanz ein XML-Schema hinzu.Add an XML schema to the Schemas property of the XmlReaderSettings instance.

  3. Geben Sie Schema als den ValidationType an.Specify Schema as the ValidationType.

  4. Geben Sie optional ValidationFlags und einen ValidationEventHandler an, um während der Schemavalidierung auftretende Fehler und Warnungen zu behandeln.Optionally specify ValidationFlags and a ValidationEventHandler to handle schema validation errors and warnings encountered during validation.

  5. Übergeben Sie abschließend das XmlReaderSettings-Objekt zusammen mit dem XML-Dokument an die Create-Methode der XmlReader-Klasse. Dabei wird ein schemavalidierender XmlReader erstellt.Finally, pass the XmlReaderSettings object to the Create method of the XmlReader class along with the XML document, creating a schema-validating XmlReader.

BeispielExample

Im folgenden Codebeispiel validiert ein schemavalidierender XmlReader die in das DOM geladenen XML-Daten.In the code example that follows, a schema-validating XmlReader validates the XML data loaded into the DOM. Es werden ungültige Änderungen am XML-Dokument vorgenommen, und das Dokument wird anschließend erneut validiert, was zu Schemavalidierungsfehlern führt.Invalid modifications are made to the XML document and the document is then revalidated, causing schema validation errors. Abschließend wird einer der Fehler korrigiert, und anschließend werden Teile des XML-Dokuments teilweise validiert.Finally, one of the errors is corrected, and then part of the XML document is partially validated.

#using <System.Xml.dll>

using namespace System;
using namespace System::Xml;
using namespace System::Xml::Schema;

ref class XmlDocumentValidationExample
{
public:

    static void Main()
    {
        try
        {
            // Create a schema validating XmlReader.
            XmlReaderSettings^ settings = gcnew XmlReaderSettings();
            settings->Schemas->Add("http://www.contoso.com/books", "contosoBooks.xsd");
            ValidationEventHandler^ eventHandler = gcnew ValidationEventHandler(ValidationEventHandlerOne);
            settings->ValidationEventHandler += eventHandler;
            settings->ValidationFlags = settings->ValidationFlags | XmlSchemaValidationFlags::ReportValidationWarnings;
            settings->ValidationType = ValidationType::Schema;

            XmlReader^ reader = XmlReader::Create("contosoBooks.xml", settings);

            // The XmlDocument validates the XML document contained
            // in the XmlReader as it is loaded into the DOM.
            XmlDocument^ document = gcnew XmlDocument();
            document->Load(reader);

            // Make an invalid change to the first and last 
            // price elements in the XML document, and write
            // the XmlSchemaInfo values assigned to the price
            // element during load validation to the console.
            XmlNamespaceManager^ manager = gcnew XmlNamespaceManager(document->NameTable);
            manager->AddNamespace("bk", "http://www.contoso.com/books");

            XmlNode^ priceNode = document->SelectSingleNode("/bk:bookstore/bk:book/bk:price", manager);

            Console::WriteLine("SchemaInfo.IsDefault: {0}", priceNode->SchemaInfo->IsDefault);
            Console::WriteLine("SchemaInfo.IsNil: {0}", priceNode->SchemaInfo->IsNil);
            Console::WriteLine("SchemaInfo.SchemaElement: {0}", priceNode->SchemaInfo->SchemaElement);
            Console::WriteLine("SchemaInfo.SchemaType: {0}", priceNode->SchemaInfo->SchemaType);
            Console::WriteLine("SchemaInfo.Validity: {0}", priceNode->SchemaInfo->Validity);

            priceNode->InnerXml = "A";

            XmlNodeList^ priceNodes = document->SelectNodes("/bk:bookstore/bk:book/bk:price", manager);
            XmlNode^ lastprice = priceNodes[priceNodes->Count - 1];
            
            lastprice->InnerXml = "B";

            // Validate the XML document with the invalid changes.
            // The invalid changes cause schema validation errors.
            document->Validate(eventHandler);

            // Correct the invalid change to the first price element.
            priceNode->InnerXml = "8.99";

            // Validate only the first book element. The last book
            // element is invalid, but not included in validation.
            XmlNode^ bookNode = document->SelectSingleNode("/bk:bookstore/bk:book", manager);
            document->Validate(eventHandler, bookNode);
        }
        catch (XmlException^ ex)
        {
            Console::WriteLine("XmlDocumentValidationExample.XmlException: {0}", ex->Message);
        }
        catch(XmlSchemaValidationException^ ex)
        {
            Console::WriteLine("XmlDocumentValidationExample.XmlSchemaValidationException: {0}", ex->Message);
        }
        catch (Exception^ ex)
        {
            Console::WriteLine("XmlDocumentValidationExample.Exception: {0}", ex->Message);
        }
    }

    static void ValidationEventHandlerOne(Object^ sender, ValidationEventArgs^ args)
    {
        if (args->Severity == XmlSeverityType::Warning)
            Console::Write("\nWARNING: ");
        else if (args->Severity == XmlSeverityType::Error)
            Console::Write("\nERROR: ");

        Console::WriteLine(args->Message);
    }
};

int main()
{
    XmlDocumentValidationExample::Main();
    return 0;
}
using System;
using System.Xml;
using System.Xml.Schema;

class XmlDocumentValidationExample
{
    static void Main(string[] args)
    {
        try
        {
            // Create a schema validating XmlReader.
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
            settings.ValidationEventHandler += new ValidationEventHandler(ValidationEventHandler);
            settings.ValidationFlags = settings.ValidationFlags | XmlSchemaValidationFlags.ReportValidationWarnings;
            settings.ValidationType = ValidationType.Schema;

            XmlReader reader = XmlReader.Create("contosoBooks.xml", settings);

            // The XmlDocument validates the XML document contained
            // in the XmlReader as it is loaded into the DOM.
            XmlDocument document = new XmlDocument();
            document.Load(reader);

            // Make an invalid change to the first and last 
            // price elements in the XML document, and write
            // the XmlSchemaInfo values assigned to the price
            // element during load validation to the console.
            XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
            manager.AddNamespace("bk", "http://www.contoso.com/books");

            XmlNode priceNode = document.SelectSingleNode(@"/bk:bookstore/bk:book/bk:price", manager);

            Console.WriteLine("SchemaInfo.IsDefault: {0}", priceNode.SchemaInfo.IsDefault);
            Console.WriteLine("SchemaInfo.IsNil: {0}", priceNode.SchemaInfo.IsNil);
            Console.WriteLine("SchemaInfo.SchemaElement: {0}", priceNode.SchemaInfo.SchemaElement);
            Console.WriteLine("SchemaInfo.SchemaType: {0}", priceNode.SchemaInfo.SchemaType);
            Console.WriteLine("SchemaInfo.Validity: {0}", priceNode.SchemaInfo.Validity);

            priceNode.InnerXml = "A";

            XmlNodeList priceNodes = document.SelectNodes(@"/bk:bookstore/bk:book/bk:price", manager);
            XmlNode lastprice = priceNodes[priceNodes.Count - 1];
            
            lastprice.InnerXml = "B";

            // Validate the XML document with the invalid changes.
            // The invalid changes cause schema validation errors.
            document.Validate(ValidationEventHandler);

            // Correct the invalid change to the first price element.
            priceNode.InnerXml = "8.99";

            // Validate only the first book element. The last book
            // element is invalid, but not included in validation.
            XmlNode bookNode = document.SelectSingleNode(@"/bk:bookstore/bk:book", manager);
            document.Validate(ValidationEventHandler, bookNode);
        }
        catch (XmlException ex)
        {
            Console.WriteLine("XmlDocumentValidationExample.XmlException: {0}", ex.Message);
        }
        catch(XmlSchemaValidationException ex)
        {
            Console.WriteLine("XmlDocumentValidationExample.XmlSchemaValidationException: {0}", ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("XmlDocumentValidationExample.Exception: {0}", ex.Message);
        }
    }

    static void ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs args)
    {
        if (args.Severity == XmlSeverityType.Warning)
            Console.Write("\nWARNING: ");
        else if (args.Severity == XmlSeverityType.Error)
            Console.Write("\nERROR: ");

        Console.WriteLine(args.Message);
    }
}
Imports System.Xml
Imports System.Xml.Schema

Class XmlDocumentValidationExample

    Shared Sub Main()

        Try

            ' Create a schema validating XmlReader.
            Dim settings As XmlReaderSettings = New XmlReaderSettings()
            settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd")
            AddHandler settings.ValidationEventHandler, New ValidationEventHandler(AddressOf ValidationEventHandler)
            settings.ValidationFlags = settings.ValidationFlags And XmlSchemaValidationFlags.ReportValidationWarnings
            settings.ValidationType = ValidationType.Schema

            Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml", settings)

            ' The XmlDocument validates the XML document contained
            ' in the XmlReader as it is loaded into the DOM.
            Dim document As XmlDocument = New XmlDocument()
            document.Load(reader)

            ' Make an invalid change to the first and last 
            ' price elements in the XML document, and write
            ' the XmlSchemaInfo values assigned to the price
            ' element during load validation to the console.
            Dim manager As XmlNamespaceManager = New XmlNamespaceManager(document.NameTable)
            manager.AddNamespace("bk", "http://www.contoso.com/books")

            Dim priceNode As XmlNode = document.SelectSingleNode("/bk:bookstore/bk:book/bk:price", manager)

            Console.WriteLine("SchemaInfo.IsDefault: {0}", priceNode.SchemaInfo.IsDefault)
            Console.WriteLine("SchemaInfo.IsNil: {0}", priceNode.SchemaInfo.IsNil)
            Console.WriteLine("SchemaInfo.SchemaElement: {0}", priceNode.SchemaInfo.SchemaElement)
            Console.WriteLine("SchemaInfo.SchemaType: {0}", priceNode.SchemaInfo.SchemaType)
            Console.WriteLine("SchemaInfo.Validity: {0}", priceNode.SchemaInfo.Validity)

            priceNode.InnerXml = "A"

            Dim priceNodes As XmlNodeList = document.SelectNodes("/bk:bookstore/bk:book/bk:price", manager)
            Dim lastprice As XmlNode = priceNodes(priceNodes.Count - 1)

            lastprice.InnerXml = "B"

            ' Validate the XML document with the invalid changes.
            ' The invalid changes cause schema validation errors.
            document.Validate(AddressOf ValidationEventHandler)

            ' Correct the invalid change to the first price element.
            priceNode.InnerXml = "8.99"

            ' Validate only the first book element. The last book
            ' element is invalid, but not included in validation.
            Dim bookNode As XmlNode = document.SelectSingleNode("/bk:bookstore/bk:book", manager)
            document.Validate(AddressOf ValidationEventHandler, bookNode)

        Catch ex As XmlException
            Console.WriteLine("XmlDocumentValidationExample.XmlException: {0}", ex.Message)

        Catch ex As XmlSchemaValidationException
            Console.WriteLine("XmlDocumentValidationExample.XmlSchemaValidationException: {0}", ex.Message)

        Catch ex As Exception
            Console.WriteLine("XmlDocumentValidationExample.Exception: {0}", ex.Message)

        End Try

    End Sub

    Shared Sub ValidationEventHandler(ByVal sender As Object, ByVal args As ValidationEventArgs)

        If args.Severity = XmlSeverityType.Warning Then
            Console.Write(vbCrLf & "WARNING: ")
        Else
            If args.Severity = XmlSeverityType.Error Then
                Console.Write(vbCrLf & "ERROR: ")
            End If
        End If
        Console.WriteLine(args.Message)

    End Sub

End Class

In diesem Beispiel wird die Datei contosoBooks.xml als Eingabe verwendet.The example takes the contosoBooks.xml file as input.

<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
        </author>
        <price>8.99</price>
    </book>
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
        <title>The Confidence Man</title>
        <author>
            <first-name>Herman</first-name>
            <last-name>Melville</last-name>
        </author>
        <price>11.99</price>
    </book>
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
        <title>The Gorgias</title>
        <author>
            <name>Plato</name>
        </author>
        <price>9.99</price>
    </book>
</bookstore>

In diesem Beispiel wird auch die Datei contosoBooks.xsd als Eingabe verwendet.The example also takes the contosoBooks.xsd file as input.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="bookstore">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="book">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string" />
                            <xs:element name="author">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="name" type="xs:string" />
                                        <xs:element minOccurs="0" name="first-name" type="xs:string" />
                                        <xs:element minOccurs="0" name="last-name" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="price" type="xs:decimal" />
                        </xs:sequence>
                        <xs:attribute name="genre" type="xs:string" use="required" />
                        <xs:attribute name="publicationdate" type="xs:date" use="required" />
                        <xs:attribute name="ISBN" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Beachten Sie Folgendes, wenn Sie XML-Daten beim Laden in das DOM validieren.Consider the following when validating XML data as it is loaded into the DOM.

  • Im vorangehenden Beispiel wird der ValidationEventHandler immer aufgerufen, sobald ein ungültiger Typ erkannt wird.In the above example, the ValidationEventHandler is called whenever an invalid type is encountered. Wenn im validierenden ValidationEventHandler kein XmlReader festgelegt ist, wird beim Aufrufen von XmlSchemaValidationException eine Load ausgelöst, wenn ein Attribut- oder Elementtyp nicht mit dem entsprechenden Typ übereinstimmt, der im validierenden Schema angegeben ist.If a ValidationEventHandler is not set on the validating XmlReader,an XmlSchemaValidationException is thrown when Load is called if any attribute or element type does not match the corresponding type specified in the validating schema.

  • Wenn ein XML-Dokument in ein XmlDocument-Objekt mit einem zugeordneten Schema geladen wird, das Standardwerte definiert, behandelt das XmlDocument-Objekt diese Standardwerte, als wären diese im XML-Dokument enthalten.When an XML document is loaded into an XmlDocument object with an associated schema that defines default values, the XmlDocument treats these defaults as if they appeared in the XML document. Das bedeutet, dass die IsEmptyElement-Eigenschaft immer den Wert false für ein Element zurückgibt, das als Standardwert aus dem Schema entnommen wurde.This means that the IsEmptyElement property always returns false for an element that was defaulted from the schema. Es wird auch im XML-Dokument als leeres Element geschrieben.Even if in the XML document, it was written as an empty element.

Validieren eines XML-Dokuments im DokumentobjektmodellValidating an XML Document in the DOM

Die Validate-Methode der XmlDocument-Klasse validiert die in das DOM geladenen XML-Daten anhand der Schemata in der XmlDocument-Eigenschaft des Schemas-Objekts.The Validate method of the XmlDocument class validates the XML data loaded in the DOM against the schemas in the XmlDocument object's Schemas property. Nach erfolgreicher Validierung werden Schemastandards angewendet, Textwerte bei Bedarf in atomare Werte konvertiert und Typinformationen validierten Informationselementen zugeordnet.After successful validation, schema defaults are applied, text values are converted to atomic values as necessary, and type information is associated with validated information items. Daher werden zuvor nicht typisierte XML-Daten durch typisierte XML-Daten ersetzt.As a result, typed XML data replaces previously untyped XML data.

Das folgende Beispiel ähnelt dem Beispiel unter "Validieren eines XML-Dokuments beim Laden in das Dokumentobjektmodell".The example below is similar to the example in "Validating an XML Document As It Is Loaded into the DOM" above. In diesem Beispiel wird das XML-Dokument nicht beim Laden in das DOM validiert, sondern nachdem es mithilfe der Validate-Methode der XmlDocument-Klasse in das DOM geladen wurde.In this example, the XML document is not validated as it is loaded into the DOM, but rather is validated after it has been loaded into the DOM using the Validate method of the XmlDocument class. Die Validate-Methode validiert das XML-Dokument anhand der in der Schemas-Eigenschaft des XmlDocument enthaltenen XML-Schemata.The Validate method validates the XML document against the XML schemas contained in the Schemas property of the XmlDocument. Anschließend werden am XML-Dokument ungültige Änderungen vorgenommen, und das Dokument wird dann erneut validiert, was zu Schemavalidierungsfehlern führt.Invalid modifications are then made to the XML document, and the document is then revalidated, causing schema validation errors. Abschließend wird einer der Fehler korrigiert, und anschließend werden Teile des XML-Dokuments teilweise validiert.Finally, one of the errors is corrected, and then part of the XML document is partially validated.

using System;
using System.Xml;
using System.Xml.Schema;

class XmlDocumentValidationExample
{
    static void Main(string[] args)
    {
        try
        {
            // Create a new XmlDocument instance and load
            // the XML document into the DOM.
            XmlDocument document = new XmlDocument();
            document.Load("contosoBooks.xml");

            // Add the XML schema for the XML document to the
            // Schemas property of the XmlDocument.
            document.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");

            // Validate the XML document loaded into the DOM.
            document.Validate(ValidationEventHandler);

            // Make an invalid change to the first and last 
            // price elements in the XML document, and write
            // the XmlSchemaInfo values assigned to the price
            // element during validation to the console.
            XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
            manager.AddNamespace("bk", "http://www.contoso.com/books");

            XmlNode priceNode = document.SelectSingleNode(@"/bk:bookstore/bk:book/bk:price", manager);

            Console.WriteLine("SchemaInfo.IsDefault: {0}", priceNode.SchemaInfo.IsDefault);
            Console.WriteLine("SchemaInfo.IsNil: {0}", priceNode.SchemaInfo.IsNil);
            Console.WriteLine("SchemaInfo.SchemaElement: {0}", priceNode.SchemaInfo.SchemaElement);
            Console.WriteLine("SchemaInfo.SchemaType: {0}", priceNode.SchemaInfo.SchemaType);
            Console.WriteLine("SchemaInfo.Validity: {0}", priceNode.SchemaInfo.Validity);

            priceNode.InnerXml = "A";

            XmlNodeList priceNodes = document.SelectNodes(@"/bk:bookstore/bk:book/bk:price", manager);
            XmlNode lastprice = priceNodes[priceNodes.Count - 1];
            
            lastprice.InnerXml = "B";

            // Validate the XML document with the invalid changes.
            // The invalid changes cause schema validation errors.
            document.Validate(ValidationEventHandler);

            // Correct the invalid change to the first price element.
            priceNode.InnerXml = "8.99";

            // Validate only the first book element. The last book
            // element is invalid, but not included in validation.
            XmlNode bookNode = document.SelectSingleNode(@"/bk:bookstore/bk:book", manager);
            document.Validate(ValidationEventHandler, bookNode);
        }
        catch (XmlException ex)
        {
            Console.WriteLine("XmlDocumentValidationExample.XmlException: {0}", ex.Message);
        }
        catch(XmlSchemaValidationException ex)
        {
            Console.WriteLine("XmlDocumentValidationExample.XmlSchemaValidationException: {0}", ex.Message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("XmlDocumentValidationExample.Exception: {0}", ex.Message);
        }
    }

    static void ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs args)
    {
        if (args.Severity == XmlSeverityType.Warning)
            Console.Write("\nWARNING: ");
        else if (args.Severity == XmlSeverityType.Error)
            Console.Write("\nERROR: ");

        Console.WriteLine(args.Message);
    }
}
Imports System.Xml
Imports System.Xml.Schema

Class XmlDocumentValidationExample

    Shared Sub Main()

        Try

            ' Create a new XmlDocument instance and load
            ' the XML document into the DOM.
            Dim document As XmlDocument = New XmlDocument()
            document.Load("contosoBooks.xml")

            ' Add the XML schema for the XML document to the
            ' Schemas property of the XmlDocument.
            document.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd")

            ' Validate the XML document loaded into the DOM.
            document.Validate(AddressOf ValidationEventHandler)

            ' Make an invalid change to the first and last 
            ' price elements in the XML document, and write
            ' the XmlSchemaInfo values assigned to the price
            ' element during validation to the console.
            Dim manager As XmlNamespaceManager = New XmlNamespaceManager(document.NameTable)
            manager.AddNamespace("bk", "http://www.contoso.com/books")

            Dim priceNode As XmlNode = document.SelectSingleNode("/bk:bookstore/bk:book/bk:price", manager)

            Console.WriteLine("SchemaInfo.IsDefault: {0}", priceNode.SchemaInfo.IsDefault)
            Console.WriteLine("SchemaInfo.IsNil: {0}", priceNode.SchemaInfo.IsNil)
            Console.WriteLine("SchemaInfo.SchemaElement: {0}", priceNode.SchemaInfo.SchemaElement)
            Console.WriteLine("SchemaInfo.SchemaType: {0}", priceNode.SchemaInfo.SchemaType)
            Console.WriteLine("SchemaInfo.Validity: {0}", priceNode.SchemaInfo.Validity)

            priceNode.InnerXml = "A"

            Dim priceNodes As XmlNodeList = document.SelectNodes("/bk:bookstore/bk:book/bk:price", manager)
            Dim lastprice As XmlNode = priceNodes(priceNodes.Count - 1)

            lastprice.InnerXml = "B"

            ' Validate the XML document with the invalid changes.
            ' The invalid changes cause schema validation errors.
            document.Validate(AddressOf ValidationEventHandler)

            ' Correct the invalid change to the first price element.
            priceNode.InnerXml = "8.99"

            ' Validate only the first book element. The last book
            ' element is invalid, but not included in validation.
            Dim bookNode As XmlNode = document.SelectSingleNode("/bk:bookstore/bk:book", manager)
            document.Validate(AddressOf ValidationEventHandler, bookNode)

        Catch ex As XmlException
            Console.WriteLine("XmlDocumentValidationExample.XmlException: {0}", ex.Message)

        Catch ex As XmlSchemaValidationException
            Console.WriteLine("XmlDocumentValidationExample.XmlSchemaValidationException: {0}", ex.Message)

        Catch ex As Exception
            Console.WriteLine("XmlDocumentValidationExample.Exception: {0}", ex.Message)

        End Try

    End Sub

    Shared Sub ValidationEventHandler(ByVal sender As Object, ByVal args As ValidationEventArgs)

        If args.Severity = XmlSeverityType.Warning Then
            Console.Write(vbCrLf & "WARNING: ")
        Else
            If args.Severity = XmlSeverityType.Error Then
                Console.Write(vbCrLf & "ERROR: ")
            End If
        End If
        Console.WriteLine(args.Message)

    End Sub

End Class

In dem Beispiel werden die Dateien contosoBooks.xml und contosoBooks.xsd, auf die unter "Validieren eines XML-Dokuments beim Laden in das Dokumentobjektmodell" verwiesen wird, als Eingabe verwendet.The example takes as input the contosoBooks.xml and contosoBooks.xsd files referred to in "Validating an XML Document as it is Loaded into the DOM" above.

Behandeln von Validierungsfehlern und ValidierungswarnungenHandling Validation Errors and Warnings

Fehler bei der XML-Schema-Validierung werden gemeldet, wenn XML-Daten beim Laden in das DOM validiert werden.XML schema validation errors are reported when validating XML data loaded in the DOM. Ihnen werden alle Schemavalidierungsfehler mitgeteilt, die während der Validierung beim Laden oder während der Validierung eines zuvor nicht validierten XML-Dokuments auftreten.You are notified about all schema validation errors found while validating the XML data as it is being loaded, or when validating a previously unvalidated XML document.

Validierungsfehler werden vom ValidationEventHandler behandelt.Validation errors are handled by the ValidationEventHandler. Wenn ein ValidationEventHandler der XmlReaderSettings-Instanz zugeordnet oder an die Validate-Methode der XmlDocument-Klasse übergeben wurde, behandelt der ValidationEventHandler Schemavalidierungsfehler. Andernfalls wird beim Auftreten eines Schemavalidierungsfehlers eine XmlSchemaValidationException ausgelöst.If a ValidationEventHandler was assigned to the XmlReaderSettings instance, or passed to the Validate method of the XmlDocument class, the ValidationEventHandler will handle schema validation errors; otherwise an XmlSchemaValidationException is raised when a schema validation error is encountered.

Hinweis

Die XML-Daten werden trotz der Schemavalidierungsfehler in das DOM geladen, sofern der ValidationEventHandler keine Ausnahme auslöst, um den Vorgang zu beenden.The XML data is loaded into the DOM despite schema validation errors unless your ValidationEventHandler raises an exception to stop the process.

Schemavalidierungswarnungen werden nicht gemeldet, sofern kein ReportValidationWarnings-Flag für das XmlReaderSettings-Objekt angegeben wurde.Schema validation warnings are not reported unless the ReportValidationWarnings flag is specified to the XmlReaderSettings object.

Beispiele zur Erläuterung des ValidationEventHandler finden Sie unter "Validieren eines XML-Dokuments beim Laden in das Dokumentobjektmodell" and "Validieren eines XML-Dokuments im Dokumentobjektmodell".For examples illustrating the ValidationEventHandler, see "Validating an XML Document As It Is Loaded into the DOM" and "Validating an XML Document in the DOM" above.

Siehe auchSee also