Partilhar via


XmlDocument.Validate Método

Definição

Valida o XmlDocument em relação aos esquemas XSD (Linguagem de Definição de Esquema XML) contidos na propriedade Schemas.

Sobrecargas

Validate(ValidationEventHandler)

Valida o XmlDocument em relação aos esquemas XSD (Linguagem de Definição de Esquema XML) contidos na propriedade Schemas.

Validate(ValidationEventHandler, XmlNode)

Valida o objeto XmlNode especificado para os esquemas de XSD (Linguagem de Definição de Esquema XML) contidos na propriedade Schemas.

Validate(ValidationEventHandler)

Valida o XmlDocument em relação aos esquemas XSD (Linguagem de Definição de Esquema XML) contidos na propriedade Schemas.

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)

Parâmetros

validationEventHandler
ValidationEventHandler

O objeto ValidationEventHandler que recebe informações sobre erros e avisos de validação de esquema.

Exceções

Ocorreu um evento de validação de esquema e nenhum objeto ValidationEventHandler foi especificado.

Exemplos

O exemplo a seguir ilustra o uso do método Validate. O exemplo cria um XmlDocument que contém um esquema XSD associado usando o e XmlReader os XmlReaderSettings objetos. Em seguida, o exemplo usa a XPathNavigator classe para modificar incorretamente o valor tipado de um elemento no documento XML que gera um erro de validação de esquema.

#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

O exemplo usa o arquivo e contosoBooks.xsd os contosoBooks.xml arquivos como entrada.

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

Comentários

O Validate método valida os dados XML em relação aos XmlDocument esquemas contidos na Schemas propriedade. O Validate método executa o aumento do conjunto de informações. Especificamente, após a validação bem-sucedida, os padrões de esquema são aplicados, os valores de texto são convertidos em valores atômicos conforme necessário e as informações de tipo são associadas a itens de informações validados. O resultado é uma subárvore XML não tipada anteriormente na substituição XmlDocument por uma subárvore tipada.

Veja a seguir notas importantes a serem consideradas ao usar o Validate método.

  • Dicas de localização de esquema como xsi:schemaLocation ou xsi:noNamespaceSchemaLocation são ignoradas.

  • Esquemas embutidos são ignorados.

  • Se ocorrerem erros de validação de esquema durante a validação, eles XmlDocument serão parcialmente validados com alguns nós com informações de tipo corretas e outros sem.

  • O processo de validação inclui verificação de exclusividade e restrições de referência (xs:ID, , xs:IDREFe xs:unique``xs:key``xs:keyref).

Aplica-se a

Validate(ValidationEventHandler, XmlNode)

Valida o objeto XmlNode especificado para os esquemas de XSD (Linguagem de Definição de Esquema XML) contidos na propriedade Schemas.

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)

Parâmetros

validationEventHandler
ValidationEventHandler

O objeto ValidationEventHandler que recebe informações sobre erros e avisos de validação de esquema.

nodeToValidate
XmlNode

O objeto XmlNode criado com base em um XmlDocument a ser validado.

Exceções

O parâmetro de objeto XmlNode não foi criado com base em um XmlDocument.

O parâmetro de objeto XmlNode não é um elemento, atributo, fragmento de documento ou o nó raiz.

Ocorreu um evento de validação de esquema e nenhum objeto ValidationEventHandler foi especificado.

Exemplos

Para obter um exemplo do Validate método, consulte o Validate método.

Comentários

O Validate método valida os dados XML no objeto em XmlNode relação aos esquemas contidos na Schemas propriedade. O Validate método executa o aumento do conjunto de informações. Especificamente, após a validação bem-sucedida, os padrões de esquema são aplicados, os valores de texto são convertidos em valores atômicos conforme necessário e as informações de tipo são associadas a itens de informações validados. O resultado é uma subárvore XML não tipada anteriormente na substituição XmlDocument por uma subárvore tipada.

Veja a seguir notas importantes a serem consideradas ao usar o Validate método.

  • Dicas de localização de esquema como xsi:schemaLocation ou xsi:noNamespaceSchemaLocation são ignoradas.

  • Esquemas embutidos são ignorados.

  • Se ocorrerem erros de validação de esquema durante a validação, eles XmlDocument serão parcialmente validados com alguns nós com informações de tipo corretas e outros sem.

Se o nó a ser validado for o nó raiz, o processo de validação incluirá a verificação de restrições de exclusividade e referência (xs:ID, , xs:IDREF, xs:key``xs:keyrefe xs:unique); caso contrário, as restrições de exclusividade e referência serão omitidas.

Aplica-se a