XmlDocument.Validate Método

Definição

Valida os XmlDocument esquemas contra a XML Schema Definition Language (XSD) contidos na Schemas propriedade.

Sobrecargas

Name Description
Validate(ValidationEventHandler)

Valida os XmlDocument esquemas contra a XML Schema Definition Language (XSD) contidos na Schemas propriedade.

Validate(ValidationEventHandler, XmlNode)

Valida o XmlNode objeto especificado contra os esquemas XML Schema Definition Language (XSD) na Schemas propriedade.

Validate(ValidationEventHandler)

Valida os XmlDocument esquemas contra a XML Schema Definition Language (XSD) contidos na Schemas propriedade.

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 ValidationEventHandler objeto que recebe informações sobre avisos e erros de validação do esquema.

Exceções

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

Exemplos

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

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 recebe os contosoBooks.xml ficheiros e contosoBooks.xsd 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>

Observações

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

Considere os seguintes pontos ao utilizar o Validate método:

  • Dicas de localização do esquema como xsi:schemaLocation ou xsi:noNamespaceSchemaLocation são ignoradas.
  • Os esquemas inline são ignorados.
  • Se ocorrerem erros de validação de esquemas durante a validação, esta XmlDocument torna-se parcialmente validada, com alguns nós com informação de tipo correta e outros sem.
  • O processo de validação inclui a verificação de unicidade e restrições de referência (xs:ID, xs:IDREF, xs:key, xs:keyref, e xs:unique).

Aplica-se a

Validate(ValidationEventHandler, XmlNode)

Valida o XmlNode objeto especificado contra os esquemas XML Schema Definition Language (XSD) na Schemas propriedade.

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 ValidationEventHandler objeto que recebe informações sobre avisos e erros de validação do esquema.

nodeToValidate
XmlNode

O XmlNode objeto criado a partir de um XmlDocument para validar.

Exceções

O XmlNode parâmetro objeto não foi criado a partir de um XmlDocument.

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

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

Exemplos

Para um exemplo do Validate método, veja o Validate método.

Observações

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

Seguem-se as notas importantes a considerar ao utilizar o Validate método.

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

  • Os esquemas inline são ignorados.

  • Se ocorrerem erros de validação de esquemas durante a validação, esta XmlDocument torna-se parcialmente validada, com alguns nós com informação de tipo correta e outros sem.

Se o nó a validar for o nó raiz, o processo de validação inclui a verificação de unicidade e restrições de referência (xs:ID, xs:IDREF, xs:key, xs:keyref, e xs:unique); caso contrário, a unicidade e as restrições de referência são omitidas.

Aplica-se a