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


XmlDocument.Validate Метод

Определение

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

Перегрузки

Имя Описание
Validate(ValidationEventHandler)

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

Validate(ValidationEventHandler, XmlNode)

Проверяет объект, указанный XmlNode в схемах языка определения XML-схемы (XSD) в свойстве Schemas .

Validate(ValidationEventHandler)

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

XmlDocument Проверяет соответствие схемам языка определения схемы XML (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, содержащая связанную схему XSD с помощью XmlReaderSettings объектов и XmlReader объектов. Затем в примере XPathNavigator используется класс для неправильного изменения типизированного значения элемента в XML-документе, создающего ошибку проверки схемы.

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:IDREF, xs:keyxs:keyrefиxs:unique).

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

Validate(ValidationEventHandler, XmlNode)

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

Проверяет объект, указанный XmlNode в схемах языка определения XML-схемы (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:keyrefxs:keyи xs:unique); в противном случае ограничения уникальности и ссылок опущены.

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