Compartir a través de


XmlDocument.Validate Método

Definición

Valida el objeto XmlDocument según los esquemas del lenguaje de definición de esquemas XML (XSD) de la propiedad Schemas.

Sobrecargas

Validate(ValidationEventHandler)

Valida el objeto XmlDocument según los esquemas del lenguaje de definición de esquemas XML (XSD) de la propiedad Schemas.

Validate(ValidationEventHandler, XmlNode)

Valida el objeto XmlNode especificado según los esquemas del lenguaje de definición de esquemas XML (XSD) de la propiedad Schemas.

Validate(ValidationEventHandler)

Valida el objeto XmlDocument según los esquemas del lenguaje de definición de esquemas XML (XSD) de la propiedad 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

Objeto ValidationEventHandler que recibe información sobre los errores y advertencias de validación de esquemas.

Excepciones

Se ha producido un evento de validación de esquema y no se ha especificado ningún objeto ValidationEventHandler.

Ejemplos

En el siguiente ejemplo, se muestra el uso del método Validate. En el ejemplo se crea un XmlDocument objeto que contiene un esquema XSD asociado mediante los XmlReaderSettings objetos y XmlReader . A continuación, en el ejemplo se usa la XPathNavigator clase para modificar incorrectamente el valor con tipo de un elemento en el documento XML que genera un error de validación 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

En el ejemplo se toman los contosoBooks.xml archivos y 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>

Comentarios

El Validate método valida los datos XML de en los XmlDocument esquemas contenidos en la Schemas propiedad . El Validate método realiza el aumento del conjunto de información. En concreto, después de la validación correcta, se aplican los valores predeterminados del esquema, los valores de texto se convierten en valores atómicos según sea necesario y la información de tipo está asociada a los elementos de información validados. El resultado es un subárbol XML sin escribir previamente en el XmlDocument subárbol reemplazado por un subárbol con tipo.

A continuación se muestran notas importantes que se deben tener en cuenta al usar el Validate método .

  • Las sugerencias de ubicación del esquema como xsi:schemaLocation o xsi:noNamespaceSchemaLocation se omiten.

  • Se omiten los esquemas insertados.

  • Si se producen errores de validación de esquemas durante la validación, se XmlDocument valida parcialmente con algunos nodos con información de tipo correcta y algunos sin .

  • El proceso de validación incluye la comprobación de la unicidad y las restricciones de referencia (xs:ID, xs:IDREF, xs:key, xs:keyrefy xs:unique).

Se aplica a

Validate(ValidationEventHandler, XmlNode)

Valida el objeto XmlNode especificado según los esquemas del lenguaje de definición de esquemas XML (XSD) de la propiedad 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

Objeto ValidationEventHandler que recibe información sobre los errores y advertencias de validación de esquemas.

nodeToValidate
XmlNode

Objeto XmlNode creado a partir de un XmlDocument que se va a validar.

Excepciones

El parámetro de objeto XmlNode no se creó a partir de un XmlDocument.

El parámetro de objeto XmlNode no es un elemento, atributo, fragmento de documento ni el nodo raíz.

Se ha producido un evento de validación de esquema y no se ha especificado ningún objeto ValidationEventHandler.

Ejemplos

Para obtener un ejemplo del Validate método , vea el Validate método .

Comentarios

El Validate método valida los datos XML del XmlNode objeto en los esquemas contenidos en la Schemas propiedad . El Validate método realiza el aumento del conjunto de información. En concreto, después de la validación correcta, se aplican los valores predeterminados del esquema, los valores de texto se convierten en valores atómicos según sea necesario y la información de tipo está asociada a los elementos de información validados. El resultado es un subárbol XML sin escribir previamente en el XmlDocument subárbol reemplazado por un subárbol con tipo.

A continuación se muestran notas importantes que se deben tener en cuenta al usar el Validate método .

  • Las sugerencias de ubicación del esquema como xsi:schemaLocation o xsi:noNamespaceSchemaLocation se omiten.

  • Se omiten los esquemas insertados.

  • Si se producen errores de validación de esquemas durante la validación, se XmlDocument valida parcialmente con algunos nodos con información de tipo correcta y algunos sin .

Si el nodo que se va a validar es el nodo raíz, el proceso de validación incluye la comprobación de la unicidad y las restricciones de referencia (xs:ID, xs:IDREF, xs:key``xs:keyref, y xs:unique); de lo contrario, se omiten las restricciones de unicidad y referencia.

Se aplica a