Поделиться через


XmlDocument.Validate Метод

Определение

Проверяет XmlDocument по схемам языка XSD, содержащимся в свойстве Schemas.

Перегрузки

Validate(ValidationEventHandler)

Проверяет XmlDocument по схемам языка XSD, содержащимся в свойстве Schemas.

Validate(ValidationEventHandler, XmlNode)

Проверяет указанный объект XmlNode по схемам языка XSD, содержащимся в свойстве Schemas.

Validate(ValidationEventHandler)

Исходный код:
XmlDocument.cs
Исходный код:
XmlDocument.cs
Исходный код:
XmlDocument.cs

Проверяет XmlDocument по схемам языка XSD, содержащимся в свойстве 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)

Параметры

validationEventHandler
ValidationEventHandler

Объект ValidationEventHandler, который получает сведения о предупреждениях и ошибках, возникающих при проверке схемы.

Исключения

Произошло событие проверки схемы, и не указан ни один объект ValidationEventHandler.

Примеры

В следующем примере показано использование метода Validate. В примере создается XmlDocument объект , содержащий связанную схему XSD с помощью XmlReaderSettings объектов и XmlReader . Затем в примере используется XPathNavigator класс для неправильного изменения типизированного значения элемента в XML-документе, что создает ошибку проверки схемы.

#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

В этом примере в качестве входных данных в качестве входных данных принимается contosoBooks.xml файлы и contosoBooks.xsd .

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

Комментарии

Метод Validate проверяет XML-данные в по XmlDocument схемам, содержащимся в свойстве Schemas . Метод Validate выполняет расширение набора сведений. В частности, после успешной проверки применяются значения по умолчанию схемы, текстовые значения при необходимости преобразуются в атомарные значения, а сведения о типе связываются с проверенными информационными элементами. Результатом является ранее нетипизированное вложенное дерево XML в XmlDocument замененном типизированным вложенным деревом.

Ниже приведены важные примечания, которые следует учитывать при использовании Validate метода .

  • Указания расположения схемы, такие как xsi:schemaLocation или xsi:noNamespaceSchemaLocation , игнорируются.

  • Встроенные схемы игнорируются.

  • Если во время проверки возникают ошибки при проверке XmlDocument схемы, выполняется частичное подтверждение с помощью некоторых узлов с правильными сведениями о типе, а для некоторых — без.

  • Процесс проверки включает проверку уникальности и ограничений ссылок (xs:ID, , xs:IDREFxs:key, xs:keyrefи xs:unique).

Применяется к

Validate(ValidationEventHandler, XmlNode)

Исходный код:
XmlDocument.cs
Исходный код:
XmlDocument.cs
Исходный код:
XmlDocument.cs

Проверяет указанный объект XmlNode по схемам языка XSD, содержащимся в свойстве 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)

Параметры

validationEventHandler
ValidationEventHandler

Объект ValidationEventHandler, который получает сведения о предупреждениях и ошибках, возникающих при проверке схемы.

nodeToValidate
XmlNode

Объект XmlNode, созданный из XmlDocument в целях проверки.

Исключения

Параметр объекта XmlNode не был создан из XmlDocument.

Параметр объекта XmlNode не является элементом, атрибутом, фрагментом документа или корневым узлом.

Произошло событие проверки схемы, и не указан ни один объект ValidationEventHandler.

Примеры

Пример метода см. в Validate описании Validate метода .

Комментарии

Метод Validate проверяет XML-данные в объекте XmlNode по схемам, содержащимся в свойстве Schemas . Метод Validate выполняет расширение набора сведений. В частности, после успешной проверки применяются значения по умолчанию схемы, текстовые значения при необходимости преобразуются в атомарные значения, а сведения о типе связываются с проверенными информационными элементами. Результатом является ранее нетипизированное вложенное дерево XML в XmlDocument замененном типизированным вложенным деревом.

Ниже приведены важные примечания, которые следует учитывать при использовании Validate метода .

  • Указания расположения схемы, такие как xsi:schemaLocation или xsi:noNamespaceSchemaLocation , игнорируются.

  • Встроенные схемы игнорируются.

  • Если во время проверки возникают ошибки при проверке XmlDocument схемы, выполняется частичное подтверждение с помощью некоторых узлов с правильными сведениями о типе, а для некоторых — без.

Если проверяемой является корневым узлом, процесс проверки включает проверку на уникальность и ограничения ссылок (xs:ID, xs:IDREF, xs:key, xs:keyrefи xs:unique); в противном случае ограничения уникальности и ссылок опущены.

Применяется к