다음을 통해 공유


XmlDocument.Validate 메서드

정의

Schemas 속성에 포함된 XSD(XML 스키마 정의) 언어 스키마를 기준으로 XmlDocument의 유효성을 검사합니다.

오버로드

Validate(ValidationEventHandler)

Schemas 속성에 포함된 XSD(XML 스키마 정의) 언어 스키마를 기준으로 XmlDocument의 유효성을 검사합니다.

Validate(ValidationEventHandler, XmlNode)

Schemas 속성에 포함된 XSD(XML 스키마 정의) 언어 스키마를 기준으로, 지정된 XmlNode 개체의 유효성을 검사합니다.

Validate(ValidationEventHandler)

Schemas 속성에 포함된 XSD(XML 스키마 정의) 언어 스키마를 기준으로 XmlDocument의 유효성을 검사합니다.

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 메서드를 사용하는 방법을 보여줍니다. 이 예제에서는 개체를 사용하여 연결된 XSD 스키마를 포함하는 스키마를 XmlReaderSettings XmlReader 만듭니다XmlDocument. 그런 다음 이 예제에서는 클래스를 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.xsd 파일을 입력으로 사용합니다contosoBooks.xml.

<?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 속성에 포함된 스키마에 XmlDocument 대해 XML 데이터의 유효성을 Schemas 검사합니다. 이 메서드는 Validate 정보 세트 보강을 수행합니다. 특히 유효성 검사에 성공하면 스키마 기본값이 적용되고 텍스트 값이 필요에 따라 원자성 값으로 변환되고 형식 정보가 유효성이 검사된 정보 항목과 연결됩니다. 결과는 형식화된 하위 트리 XmlDocument 로 대체된 이전에 형식화되지 않은 XML 하위 트리입니다.

다음은 메서드를 사용할 때 고려해야 할 중요한 참고 사항입니다 Validate .

  • 스키마 위치 힌트는 유사 xsi:schemaLocation 하거나 xsi:noNamespaceSchemaLocation 무시됩니다.

  • 인라인 스키마는 무시됩니다.

  • 유효성 XmlDocument 검사 중에 스키마 유효성 검사 오류가 발생하는 경우 올바른 형식 정보를 가진 일부 노드와 일부 노드가 없는 상태에서 부분적으로 유효성이 검사됩니다.

  • 유효성 검사 프로세스에는 고유성 및 참조 제약 조건(xs:ID, , xs:keyref``xs:IDREF``xs:keyxs:unique)에 대한 검사가 포함됩니다.

적용 대상

Validate(ValidationEventHandler, XmlNode)

Schemas 속성에 포함된 XSD(XML 스키마 정의) 언어 스키마를 기준으로, 지정된 XmlNode 개체의 유효성을 검사합니다.

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

XmlDocument에서 만든 XmlNode 개체이며 유효성을 검사할 대상입니다.

예외

XmlNode 개체 매개 변수는 XmlDocument에서 만들어지지 않았습니다.

XmlNode 개체 매개 변수는 요소, 특성, 문서 조각 또는 루트 노드가 아닙니다.

스키마 유효성 검사 이벤트가 발생했으며 ValidationEventHandler 개체가 지정되지 않았습니다.

예제

메서드의 예제는 Validate 메서드를 참조하세요 Validate .

설명

이 메서드는 Validate 속성에 포함된 스키마에 XmlNode 대해 개체의 XML 데이터의 유효성을 Schemas 검사합니다. 이 메서드는 Validate 정보 세트 보강을 수행합니다. 특히 유효성 검사에 성공하면 스키마 기본값이 적용되고 텍스트 값이 필요에 따라 원자성 값으로 변환되고 형식 정보가 유효성이 검사된 정보 항목과 연결됩니다. 결과는 형식화된 하위 트리 XmlDocument 로 대체된 이전에 형식화되지 않은 XML 하위 트리입니다.

다음은 메서드를 사용할 때 고려해야 할 중요한 참고 사항입니다 Validate .

  • 스키마 위치 힌트는 유사 xsi:schemaLocation 하거나 xsi:noNamespaceSchemaLocation 무시됩니다.

  • 인라인 스키마는 무시됩니다.

  • 유효성 XmlDocument 검사 중에 스키마 유효성 검사 오류가 발생하는 경우 올바른 형식 정보를 가진 일부 노드와 일부 노드가 없는 상태에서 부분적으로 유효성이 검사됩니다.

유효성을 검사할 노드가 루트 노드인 경우 유효성 검사 프로세스에는 고유성 및 참조 제약 조건(xs:ID, xs:IDREF, xs:keyref``xs:keyxs:unique);에 대한 검사가 포함됩니다. 그렇지 않으면 고유성 및 참조 제약 조건이 생략됩니다.

적용 대상