Condividi tramite


XmlDocument.Validate Metodo

Definizione

Convalida l'oggetto XmlDocument sulla base degli schemi XSD (XML Schema Definition Language) contenuti nella proprietà Schemas.

Overload

Validate(ValidationEventHandler)

Convalida l'oggetto XmlDocument sulla base degli schemi XSD (XML Schema Definition Language) contenuti nella proprietà Schemas.

Validate(ValidationEventHandler, XmlNode)

Convalida l'oggetto XmlNode specificato sulla base degli schemi XSD (XML Schema Definition Language) nella proprietà Schemas.

Validate(ValidationEventHandler)

Origine:
XmlDocument.cs
Origine:
XmlDocument.cs
Origine:
XmlDocument.cs

Convalida l'oggetto XmlDocument sulla base degli schemi XSD (XML Schema Definition Language) contenuti nella proprietà 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)

Parametri

validationEventHandler
ValidationEventHandler

Oggetto ValidationEventHandler che riceve le informazioni sugli avvisi e gli errori relativi alla convalida degli schemi.

Eccezioni

Si è verificato un evento di convalida dello schema e non era specificato alcun oggetto ValidationEventHandler.

Esempio

Nell'esempio riportato di seguito viene illustrato l'utilizzo del metodo Validate. Nell'esempio viene creato un XmlDocument oggetto contenente uno schema XSD associato usando gli XmlReaderSettings oggetti e XmlReader . Nell'esempio viene quindi utilizzata la XPathNavigator classe per modificare erroneamente il valore tipizzato di un elemento nel documento XML che genera un errore di convalida dello schema.

#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

L'esempio accetta i contosoBooks.xml file e contosoBooks.xsd come 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>
<?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>

Commenti

Il Validate metodo convalida i dati XML nell'oggetto XmlDocument rispetto agli schemi contenuti nella Schemas proprietà . Il Validate metodo esegue l'aumento dell'infoset. In particolare, dopo la convalida, vengono applicate le impostazioni predefinite dello schema, i valori di testo vengono convertiti in valori atomici in base alle esigenze e le informazioni sul tipo sono associate agli elementi di informazioni convalidati. Il risultato è un sottoalbero XML non tipizzato in precedenza nell'albero XmlDocument secondario sostituito con un sottoalbero tipizzato.

Di seguito sono riportate note importanti da considerare quando si usa il Validate metodo .

  • Gli hint per la posizione dello schema, ad esempio xsi:schemaLocation o xsi:noNamespaceSchemaLocation vengono ignorati.

  • Gli schemi inline vengono ignorati.

  • Se si verificano errori di convalida dello schema durante la convalida, l'oggetto XmlDocument viene convalidato parzialmente con alcuni nodi con informazioni sul tipo corrette e alcuni senza.

  • Il processo di convalida include la verifica dell'univocità e dei vincoli di riferimento (xs:ID, xs:IDREF, xs:key, xs:keyrefe xs:unique).

Si applica a

Validate(ValidationEventHandler, XmlNode)

Origine:
XmlDocument.cs
Origine:
XmlDocument.cs
Origine:
XmlDocument.cs

Convalida l'oggetto XmlNode specificato sulla base degli schemi XSD (XML Schema Definition Language) nella proprietà 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)

Parametri

validationEventHandler
ValidationEventHandler

Oggetto ValidationEventHandler che riceve le informazioni sugli avvisi e gli errori relativi alla convalida degli schemi.

nodeToValidate
XmlNode

Oggetto XmlNode creato da un oggetto XmlDocument da convalidare.

Eccezioni

Il parametro dell'oggetto XmlNode non è stato creato da un XmlDocument.

Il parametro dell'oggetto XmlNode non è un elemento, attributo, frammento di documento o il nodo radice.

Si è verificato un evento di convalida dello schema e non era specificato alcun oggetto ValidationEventHandler.

Esempio

Per un esempio del Validate metodo , vedere il Validate metodo .

Commenti

Il Validate metodo convalida i dati XML nell'oggetto XmlNode rispetto agli schemi contenuti nella Schemas proprietà . Il Validate metodo esegue l'aumento dell'infoset. In particolare, dopo la convalida, vengono applicate le impostazioni predefinite dello schema, i valori di testo vengono convertiti in valori atomici in base alle esigenze e le informazioni sul tipo sono associate agli elementi di informazioni convalidati. Il risultato è un sottoalbero XML non tipizzato in precedenza nell'albero XmlDocument secondario sostituito con un sottoalbero tipizzato.

Di seguito sono riportate note importanti da considerare quando si usa il Validate metodo .

  • Gli hint per la posizione dello schema, ad esempio xsi:schemaLocation o xsi:noNamespaceSchemaLocation vengono ignorati.

  • Gli schemi inline vengono ignorati.

  • Se si verificano errori di convalida dello schema durante la convalida, l'oggetto XmlDocument viene convalidato parzialmente con alcuni nodi con informazioni sul tipo corrette e alcuni senza.

Se il nodo da convalidare è il nodo radice, il processo di convalida include la verifica dell'univocità e dei vincoli di riferimento (xs:ID, xs:IDREF, xs:key, xs:keyrefe xs:unique); in caso contrario, vengono omessi vincoli di univocità e riferimento.

Si applica a