XmlDocument.Validate Methode

Definition

Validiert das XmlDocument anhand der in der Schemas-Eigenschaft enthaltenen XSD-Schemas (XML Schema Definition).

Überlädt

Validate(ValidationEventHandler)

Validiert das XmlDocument anhand der in der Schemas-Eigenschaft enthaltenen XSD-Schemas (XML Schema Definition).

Validate(ValidationEventHandler, XmlNode)

Validiert das angegebene XmlNode-Objekt anhand der in der Schemas-Eigenschaft enthaltenen XSD-Schemas (XML Schema Definition).

Validate(ValidationEventHandler)

Validiert das XmlDocument anhand der in der Schemas-Eigenschaft enthaltenen XSD-Schemas (XML Schema Definition).

public:
 void Validate(System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public void Validate (System.Xml.Schema.ValidationEventHandler? validationEventHandler);
public void Validate (System.Xml.Schema.ValidationEventHandler validationEventHandler);
member this.Validate : System.Xml.Schema.ValidationEventHandler -> unit
Public Sub Validate (validationEventHandler As ValidationEventHandler)

Parameter

validationEventHandler
ValidationEventHandler

Das ValidationEventHandler-Objekt, das Informationen zu Warnungen und Fehlern der Schemavalidierung empfängt.

Ausnahmen

Ein Schemavalidierungsereignis ist aufgetreten, und es wurde kein ValidationEventHandler-Objekt angegeben.

Beispiele

Im folgenden Beispiel wird die Verwendung der Validate-Methode veranschaulicht. Im Beispiel wird ein XmlDocument erstellt, das ein zugeordnetes XSD-Schema mit den XmlReaderSettings -Objekten und XmlReader enthält. Im Beispiel wird dann die XPathNavigator -Klasse verwendet, um den typisierten Wert eines Elements im XML-Dokument fälschlicherweise zu ändern, wodurch ein Schemaüberprüfungsfehler generiert wird.

#using <System.Xml.dll>

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

class XPathValidation
{
public:

    static void Main()
    {
        try
        {
            XmlReaderSettings^ settings = gcnew XmlReaderSettings();
            settings->Schemas->Add("http://www.contoso.com/books", "contosoBooks.xsd");
            settings->ValidationType = ValidationType::Schema;

            XmlReader^ reader = XmlReader::Create("contosoBooks.xml", settings);
            XmlDocument^ document = gcnew XmlDocument();
            document->Load(reader);

            ValidationEventHandler^ eventHandler = gcnew ValidationEventHandler(ValidationEventHandlerOne);

            // the following call to Validate succeeds.
            document->Validate(eventHandler);

            // add a node so that the document is no longer valid
            XPathNavigator^ navigator = document->CreateNavigator();
            navigator->MoveToFollowing("price", "http://www.contoso.com/books");
            XmlWriter^ writer = navigator->InsertAfter();
            writer->WriteStartElement("anotherNode", "http://www.contoso.com/books");
            writer->WriteEndElement();
            writer->Close();

            // the document will now fail to successfully validate
            document->Validate(eventHandler);
        }
        catch(Exception^ ex)
        {
            Console::WriteLine(ex->Message);
        }
    }

    static void ValidationEventHandlerOne(Object^ sender, ValidationEventArgs^ e)
    {
        switch (e->Severity)
        {
        case XmlSeverityType::Error:
            Console::WriteLine("Error: {0}", e->Message);
            break;
        case XmlSeverityType::Warning:
            Console::WriteLine("Warning {0}", e->Message);
            break;
        }

    }
};

int main()
{
    XPathValidation::Main();
    Console::ReadLine();
    return 0;
};
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;

class XPathValidation
{
    static void Main()
    {
        try
        {
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
            settings.ValidationType = ValidationType.Schema;

            XmlReader reader = XmlReader.Create("contosoBooks.xml", settings);
            XmlDocument document = new XmlDocument();
            document.Load(reader);

            ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);

            // the following call to Validate succeeds.
            document.Validate(eventHandler);

            // add a node so that the document is no longer valid
            XPathNavigator navigator = document.CreateNavigator();
            navigator.MoveToFollowing("price", "http://www.contoso.com/books");
            XmlWriter writer = navigator.InsertAfter();
            writer.WriteStartElement("anotherNode", "http://www.contoso.com/books");
            writer.WriteEndElement();
            writer.Close();

            // the document will now fail to successfully validate
            document.Validate(eventHandler);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    static void ValidationEventHandler(object sender, ValidationEventArgs e)
    {
        switch (e.Severity)
        {
            case XmlSeverityType.Error:
                Console.WriteLine("Error: {0}", e.Message);
                break;
            case XmlSeverityType.Warning:
                Console.WriteLine("Warning {0}", e.Message);
                break;
        }
    }
}
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.XPath

Class XPathValidation

    Shared Sub Main()

        Try

            Dim settings As XmlReaderSettings = New XmlReaderSettings()
            settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd")
            settings.ValidationType = ValidationType.Schema

            Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml", settings)
            Dim document As XmlDocument = New XmlDocument()
            document.Load(reader)

            Dim eventHandler As ValidationEventHandler = New ValidationEventHandler(AddressOf ValidationEventHandler)

            ' the following call to Validate succeeds.
            document.Validate(eventHandler)

            ' add a node so that the document is no longer valid
            Dim navigator As XPathNavigator = document.CreateNavigator()
            navigator.MoveToFollowing("price", "http://www.contoso.com/books")
            Dim writer As XmlWriter = navigator.InsertAfter()
            writer.WriteStartElement("anotherNode", "http://www.contoso.com/books")
            writer.WriteEndElement()
            writer.Close()

            ' the document will now fail to successfully validate
            document.Validate(eventHandler)

        Catch ex As Exception

            Console.WriteLine(ex.Message)

        End Try

    End Sub

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

        Select Case e.Severity
            Case XmlSeverityType.Error
                Console.WriteLine("Error: {0}", e.Message)
            Case XmlSeverityType.Warning
                Console.WriteLine("Warning {0}", e.Message)
        End Select

    End Sub

End Class

Im Beispiel werden die contosoBooks.xml Dateien und contosoBooks.xsd als Eingabe verwendet.

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

Hinweise

Die Validate -Methode überprüft die XML-Daten im XmlDocument anhand der Schemas, die in der Schemas -Eigenschaft enthalten sind. Die Validate -Methode führt eine Infoseterweiterung durch. Insbesondere werden nach erfolgreicher Validierung Schemastandardwerte angewendet, Textwerte werden nach Bedarf in atomare Werte konvertiert, und Typinformationen werden überprüften Informationselementen zugeordnet. Das Ergebnis ist eine zuvor nicht typisierte XML-Unterstruktur in der XmlDocument durch eine typisierte Unterstruktur ersetzt.

Die folgenden wichtigen Hinweise sollten bei der Verwendung der Validate -Methode berücksichtigt werden.

  • Schemaspeicherorthinweise wie xsi:schemaLocation oder xsi:noNamespaceSchemaLocation werden ignoriert.

  • Inlineschemas werden ignoriert.

  • Wenn während der Überprüfung Fehler bei der Schemavalidierung auftreten, wird die XmlDocument teilweise mit einigen Knoten mit korrekten Typinformationen und einige ohne überprüft.

  • Der Validierungsprozess umfasst die Überprüfung auf Eindeutigkeits- und Verweiseinschränkungen (xs:ID, xs:IDREF, xs:key, xs:keyrefund xs:unique).

Gilt für:

Validate(ValidationEventHandler, XmlNode)

Validiert das angegebene XmlNode-Objekt anhand der in der Schemas-Eigenschaft enthaltenen XSD-Schemas (XML Schema Definition).

public:
 void Validate(System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, System::Xml::XmlNode ^ nodeToValidate);
public void Validate (System.Xml.Schema.ValidationEventHandler? validationEventHandler, System.Xml.XmlNode nodeToValidate);
public void Validate (System.Xml.Schema.ValidationEventHandler validationEventHandler, System.Xml.XmlNode nodeToValidate);
member this.Validate : System.Xml.Schema.ValidationEventHandler * System.Xml.XmlNode -> unit
Public Sub Validate (validationEventHandler As ValidationEventHandler, nodeToValidate As XmlNode)

Parameter

validationEventHandler
ValidationEventHandler

Das ValidationEventHandler-Objekt, das Informationen zu Warnungen und Fehlern der Schemavalidierung empfängt.

nodeToValidate
XmlNode

Das XmlNode-Objekt, das aus einem zu validierenden XmlDocument erstellt wurde.

Ausnahmen

Der XmlNode-Objektparameter wurde nicht aus einem XmlDocument erstellt.

Der XmlNode-Objektparameter ist kein Element, Attribut, Dokumentfragment oder der Stammknoten.

Ein Schemavalidierungsereignis ist aufgetreten, und es wurde kein ValidationEventHandler-Objekt angegeben.

Beispiele

Ein Beispiel für die Validate -Methode finden Sie in der Validate -Methode.

Hinweise

Die Validate -Methode überprüft die XML-Daten im XmlNode -Objekt anhand der in der Schemas -Eigenschaft enthaltenen Schemas. Die Validate -Methode führt eine Infoseterweiterung durch. Insbesondere werden nach erfolgreicher Validierung Schemastandardwerte angewendet, Textwerte werden nach Bedarf in atomare Werte konvertiert, und Typinformationen werden überprüften Informationselementen zugeordnet. Das Ergebnis ist eine zuvor nicht typisierte XML-Unterstruktur in der XmlDocument durch eine typisierte Unterstruktur ersetzt.

Die folgenden wichtigen Hinweise sollten bei der Verwendung der Validate -Methode berücksichtigt werden.

  • Schemaspeicherorthinweise wie xsi:schemaLocation oder xsi:noNamespaceSchemaLocation werden ignoriert.

  • Inlineschemas werden ignoriert.

  • Wenn während der Überprüfung Fehler bei der Schemavalidierung auftreten, wird die XmlDocument teilweise mit einigen Knoten mit korrekten Typinformationen und einige ohne überprüft.

Wenn der zu überprüfende Knoten der Stammknoten ist, umfasst der Überprüfungsprozess die Überprüfung auf Eindeutigkeits- und Verweiseinschränkungen (xs:ID, , xs:IDREFxs:key, xs:keyrefund xs:unique); andernfalls werden Eindeutigkeits- und Verweiseinschränkungen weggelassen.

Gilt für: