Extensions.Validate Extensions.Validate Extensions.Validate Method

정의

XDocument, XElement 또는 XAttributeXmlSchemaSet에서 XSD를 준수하는지 확인합니다.Validates that an XDocument, an XElement, or an XAttribute conforms to an XSD in an XmlSchemaSet.

오버로드

Validate(XDocument, XmlSchemaSet, ValidationEventHandler) Validate(XDocument, XmlSchemaSet, ValidationEventHandler) Validate(XDocument, XmlSchemaSet, ValidationEventHandler)

이 메서드는 XDocumentXmlSchemaSet에서 XSD를 준수하는지 확인합니다.This method validates that an XDocument conforms to an XSD in an XmlSchemaSet.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler) Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler) Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

이 메서드는 XAttribute가 지정된 XmlSchemaObjectXmlSchemaSet을 준수하는지 확인합니다.This method validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet.

Validate(XDocument, XmlSchemaSet, ValidationEventHandler, Boolean) Validate(XDocument, XmlSchemaSet, ValidationEventHandler, Boolean) Validate(XDocument, XmlSchemaSet, ValidationEventHandler, Boolean)

XDocumentXmlSchemaSet에서 XSD를 준수하는지 확인하고, 선택적으로 XML 트리를 PSVI(스키마 유효성 검사 이후 정보 집합)로 채울 수 있습니다.Validates that an XDocument conforms to an XSD in an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler) Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler) Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

이 메서드는 XElement 하위 트리가 지정된 XmlSchemaObjectXmlSchemaSet을 준수하는지 확인합니다.This method validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean) Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean) Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

XAttribute가 지정된 XmlSchemaObjectXmlSchemaSet을 준수하는지 확인하고, 선택적으로 XML 트리를 PSVI(스키마 유효성 검사 이후 정보 집합)로 채울 수 있습니다.Validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean) Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean) Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

XElement 하위 트리가 지정된 XmlSchemaObjectXmlSchemaSet을 준수하는지 확인하고, 선택적으로 XML 트리를 PSVI(스키마 유효성 검사 이후 정보 집합)로 채울 수 있습니다.Validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

설명

이러한 메서드는 내부 사용 XmlReader XSD에 대해 XML 트리의 유효성을 검사할 합니다.These methods use an underlying XmlReader to validate the XML tree against an XSD.

유효성 검사 오류 및 경고 메시지를 사용 하 여 처리 되는 ValidationEventHandler 위임 합니다.Validation error and warning messages are handled using the ValidationEventHandler delegate. 유효성 검사 오류도 노출 된 이벤트 처리기를 이러한 메서드에 제공 하는 경우는 XmlSchemaValidationException합니다.If no event handler is provided to these methods, validation errors are exposed as an XmlSchemaValidationException. 유효성 검사 경고 발생 하지는 XmlSchemaValidationException throw 됩니다.Validation warnings do not cause an XmlSchemaValidationException to be thrown.

이러한 확장 메서드 중 일부는 필요에 따라 스키마 유효성 검사 이후 정보 집합 (PSVI)의 채우기를 허용합니다.Some of these extension methods optionally allow population of the post-schema-validation infoset (PSVI).

Validate(XDocument, XmlSchemaSet, ValidationEventHandler) Validate(XDocument, XmlSchemaSet, ValidationEventHandler) Validate(XDocument, XmlSchemaSet, ValidationEventHandler)

이 메서드는 XDocumentXmlSchemaSet에서 XSD를 준수하는지 확인합니다.This method validates that an XDocument conforms to an XSD in an XmlSchemaSet.

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XDocument ^ source, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public static void Validate (this System.Xml.Linq.XDocument source, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler);
static member Validate : System.Xml.Linq.XDocument * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler -> unit

매개 변수

source
XDocument XDocument XDocument

유효성을 검사할 XDocument입니다.The XDocument to validate.

schemas
XmlSchemaSet XmlSchemaSet XmlSchemaSet

유효성을 검사할 XmlSchemaSet입니다.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler ValidationEventHandler ValidationEventHandler

판독기에서 유효성 검사 오류를 발견했을 때 수행되는 이벤트의 ValidationEventHandler입니다.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. null인 경우 유효성 검사 오류가 있을 때 예외가 throw됩니다.If null, throws an exception upon validation errors.

예외

XSD(XML 스키마 정의) 언어 유효성 검사 오류가 발생한 경우 throw됩니다.Thrown for XML Schema Definition Language (XSD) validation errors.

예제

다음 예제에서는 XmlSchemaSet을 만든 다음 스키마 집합에 대해 두 XDocument 개체의 유효성을 검사합니다.The following example creates an XmlSchemaSet, then validates two XDocument objects against the schema set. 문서 중 하나는 유효하고 다른 하나는 유효하지 않습니다.One of the documents is valid, the other is not.


                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
          <xsd:element name='Child2' minOccurs='1' maxOccurs='1'/>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  

XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child2", "content1")  
    )  
);  

XDocument doc2 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child3", "content1")  
    )  
);  

Console.WriteLine("Validating doc1");  
bool errors = false;  
doc1.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     });  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
Console.WriteLine("Validating doc2");  
errors = false;  
doc2.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     });  
Console.WriteLine("doc2 {0}", errors ? "did not validate" : "validated");  

                Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  
    Dim xsdMarkup As XDocument = _  
    <?xml version='1.0'?>  
    <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
        <xsd:element name='Root'>  
            <xsd:complexType>  
                <xsd:sequence>  
                    <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
                    <xsd:element name='Child2' minOccurs='1' maxOccurs='1'/>  
                </xsd:sequence>  
            </xsd:complexType>  
        </xsd:element>  
    </xsd:schema>  

    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = _  
    <?xml version='1.0'?>  
    <Root>  
        <Child1>content1</Child1>  
        <Child2>content2</Child2>  
    </Root>  

    Dim doc2 As XDocument = _  
    <?xml version='1.0'?>  
    <Root>  
        <Child1>content1</Child1>  
        <Child3>content1</Child3>  
    </Root>  

    Console.WriteLine("Validating doc1")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Validating doc2")  
    errors = False  
    doc2.Validate(schemas, AddressOf XSDErrors)  
    Console.WriteLine("doc2 {0}", IIf(errors, "did not validate", "validated"))  
End Sub  

이 예제는 다음과 같은 출력을 생성합니다.This example produces the following output:

Validating doc1  
doc1 validated  

Validating doc2  
The element 'Root' has invalid child element 'Child3'. List of possible elements expected: 'Child2'.  
doc2 did not validate  

설명

이 확장 메서드는 유효성을 검사 합니다 XDocument 스키마 콘텐츠 모델에 대 한 준수 XmlSchemaSet합니다.This extension method validates that the XDocument conforms to the schema content model in XmlSchemaSet.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler) Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler) Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

이 메서드는 XAttribute가 지정된 XmlSchemaObjectXmlSchemaSet을 준수하는지 확인합니다.This method validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet.

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XAttribute ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public static void Validate (this System.Xml.Linq.XAttribute source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler);
static member Validate : System.Xml.Linq.XAttribute * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler -> unit

매개 변수

source
XAttribute XAttribute XAttribute

유효성을 검사할 XAttribute입니다.The XAttribute to validate.

partialValidationType
XmlSchemaObject XmlSchemaObject XmlSchemaObject

유효성을 검사할 하위 트리를 지정하는 XmlSchemaObject입니다.An XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet XmlSchemaSet XmlSchemaSet

유효성을 검사할 XmlSchemaSet입니다.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler ValidationEventHandler ValidationEventHandler

판독기에서 유효성 검사 오류를 발견했을 때 수행되는 이벤트의 ValidationEventHandler입니다.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. null인 경우 유효성 검사 오류가 있을 때 예외가 throw됩니다.If null, throws an exception upon validation errors.

예외

XSD(XML 스키마 정의) 언어 유효성 검사 오류가 발생한 경우 throw됩니다.Thrown for XML Schema Definition Language (XSD) validation errors.

예제


                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:simpleContent>  
          <xsd:extension base='xsd:string'>  
           <xsd:attribute name='Lang' use='required'>  
            <xsd:simpleType>  
             <xsd:restriction base='xsd:token'>  
              <xsd:enumeration value='C#'/>  
              <xsd:enumeration value='VB'/>  
             </xsd:restriction>  
            </xsd:simpleType>  
           </xsd:attribute>  
          </xsd:extension>  
         </xsd:simpleContent>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  

XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  

XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XAttribute("Lang", "C#")  
    )  
);  

Console.WriteLine("Validating doc1 ...");  
bool errors = false;  
doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
Console.WriteLine("Validating Lang attribute ...");  
XAttribute lang = doc1.Root.Attribute("Lang");  

errors = false;  
lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  

// the following makes the Lang attribute invalid according to the schema  
lang.Value = "VC";  

Console.WriteLine();  
Console.WriteLine("Validating Lang attribute ...");  

errors = false;  
lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  

                Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  
    Dim xsdMarkup As XDocument = _  
      <?xml version='1.0'?>  
      <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
          <xsd:element name='Root'>  
              <xsd:complexType>  
                  <xsd:simpleContent>  
                      <xsd:extension base='xsd:string'>  
                          <xsd:attribute name='Lang' use='required'>  
                              <xsd:simpleType>  
                                  <xsd:restriction base='xsd:token'>  
                                      <xsd:enumeration value='C#'/>  
                                      <xsd:enumeration value='VB'/>  
                                  </xsd:restriction>  
                              </xsd:simpleType>  
                          </xsd:attribute>  
                      </xsd:extension>  
                  </xsd:simpleContent>  
              </xsd:complexType>  
          </xsd:element>  
      </xsd:schema>  

    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = <?xml version='1.0'?>  
                            <Root Lang='C#'/>  

    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  
    Dim lang As XAttribute = doc1.Root.Attribute("Lang")  

    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  

    ' the following makes the Lang attribute invalid according to the schema  
    lang.Value = "VC"  

    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  

    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
End Sub  

이 예제는 다음과 같은 출력을 생성합니다.This example produces the following output:

Validating doc1 ...  
doc1 validated  

Validating Lang attribute ...  
lang validated  

Validating Lang attribute ...  
The 'Lang' attribute is invalid - The value 'VC' is invalid according to its datatype 'Token' - The Enumeration constraint failed.  
lang did not validate  

설명

이 메서드를 사용 하 여 유효성을 검사 하는 XAttribute 스키마를 준수 합니다.You can use this method to validate that an XAttribute conforms to a schema. 일반적으로 특성을 수정 하 고 여전히 해당 스키마를 준수 하는지 확인 하려는 경우이 메서드를 사용 합니다.You typically use this method when you have modified an attribute, and you want to make sure that it still conforms to its schema. 전체 문서를 유효성을 검사할 수 있지만 특성만 유효성을 검사 하는 처리 시간이 적게 걸립니다.You could validate the entire document, but it takes less processing time to validate just the attribute.

전달 하는 경우 null 에 대 한 validationEventHandler,이 메서드는 유효성 검사 오류 시 예외가 발생 합니다.If you pass null for validationEventHandler, this method raises an exception upon validation errors. 유효성 검사 경고에는 예외가 발생 하지 않습니다.Validation warnings will not raise an exception.

인스턴스를 사용 하면 특성의 유효성을 검사할 XmlSchemaObject합니다.To validate an attribute, you use an instance of XmlSchemaObject. 다양 한 방법으로이 인스턴스를 가져올 수 있습니다.You can obtain this instance in various ways. 쉬운 아래와 같습니다.An easy way is as follows:

  1. 문서 스키마를 준수 하는지 확인 합니다.Validate that a document conforms to a schema.

  2. 스키마 유효성 검사 이후 정보 집합 (PSVI) 호출 하 여 추가 된 Validate 확장 메서드.Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. 호출 된 GetSchemaInfo 확장 메서드를 구현 하는 개체 검색 IXmlSchemaInfo합니다.Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. 검색된 된 개체에서 가져올 수 있습니다는 XmlSchemaObject합니다.From the retrieved object, you can get an XmlSchemaObject.

인스턴스를 만든 후는 XmlSchemaObject, 특성의 유효성을 검사 하려면이 메서드를 사용할 수 있습니다.After you have an instance of an XmlSchemaObject, you can use this method to validate an attribute.

Validate(XDocument, XmlSchemaSet, ValidationEventHandler, Boolean) Validate(XDocument, XmlSchemaSet, ValidationEventHandler, Boolean) Validate(XDocument, XmlSchemaSet, ValidationEventHandler, Boolean)

XDocumentXmlSchemaSet에서 XSD를 준수하는지 확인하고, 선택적으로 XML 트리를 PSVI(스키마 유효성 검사 이후 정보 집합)로 채울 수 있습니다.Validates that an XDocument conforms to an XSD in an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XDocument ^ source, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XDocument source, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler, bool addSchemaInfo);
static member Validate : System.Xml.Linq.XDocument * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler * bool -> unit

매개 변수

source
XDocument XDocument XDocument

유효성을 검사할 XDocument입니다.The XDocument to validate.

schemas
XmlSchemaSet XmlSchemaSet XmlSchemaSet

유효성을 검사할 XmlSchemaSet입니다.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler ValidationEventHandler ValidationEventHandler

판독기에서 유효성 검사 오류를 발견했을 때 수행되는 이벤트의 ValidationEventHandler입니다.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. null인 경우 유효성 검사 오류가 있을 때 예외가 throw됩니다.If null, throws an exception upon validation errors.

addSchemaInfo
Boolean Boolean Boolean

PSVI(스키마 유효성 검사 이후 정보 집합)를 채울지 여부를 나타내는 Boolean입니다.A Boolean indicating whether to populate the post-schema-validation infoset (PSVI).

예외

XSD(XML 스키마 정의) 언어 유효성 검사 오류가 발생한 경우 throw됩니다.Thrown for XML Schema Definition Language (XSD) validation errors.

예제

다음 예제에 정의 하는 XSD의 Child2 요소는 Att1 기본값을 사용 하 여 특성입니다.The following example contains an XSD that defines the Child2 element with an Att1 attribute with a default value. 문서의 유효성을 검사 한 후 기본값을 사용 하 여 특성을 XML 트리에 추가 됩니다.After successfully validating the document, the attribute with the default value is added to the XML tree. 기본 특성이 없는 참고 추가할 doc2, 스키마에 대해 유효성을 검사 하지 않습니다.Note that the default attribute is not added to doc2, which does not validate against the schema.


                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
          <xsd:element name='Child2' minOccurs='1' maxOccurs='1'>  
           <xsd:complexType>  
            <xsd:simpleContent>  
             <xsd:extension base='xsd:string'>  
              <xsd:attribute name='Att1' default='Att1 Default Value'/>  
             </xsd:extension>  
            </xsd:simpleContent>  
           </xsd:complexType>  
          </xsd:element>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  

XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "c1"),  
        new XElement("Child2", "c2")  
    )  
);  

XDocument doc2 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child3", "content1")  
    )  
);  

Console.WriteLine("Validating doc1");  
bool errors = false;  
doc1.Validate(schemas, (o, e) =>  
                           {  
                               Console.WriteLine("{0}", e.Message);  
                               errors = true;  
                           }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
Console.WriteLine("Validating doc2");  
errors = false;  
doc2.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     }, true);  
Console.WriteLine("doc2 {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
Console.WriteLine("Contents of doc1:");  
Console.WriteLine(doc1);  

Console.WriteLine();  
Console.WriteLine("Contents of doc2:");  
Console.WriteLine(doc2);  

                Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  
    Dim xsdMarkup As XDocument = _  
    <?xml version='1.0'?>  
    <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
        <xsd:element name='Root'>  
            <xsd:complexType>  
                <xsd:sequence>  
                    <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
                    <xsd:element name='Child2' minOccurs='1' maxOccurs='1'>  
                        <xsd:complexType>  
                            <xsd:simpleContent>  
                                <xsd:extension base='xsd:string'>  
                                    <xsd:attribute name='Att1' default='Att1 Default Value'/>  
                                </xsd:extension>  
                            </xsd:simpleContent>  
                        </xsd:complexType>  
                    </xsd:element>  
                </xsd:sequence>  
            </xsd:complexType>  
        </xsd:element>  
    </xsd:schema>  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = <?xml version='1.0'?>  
                            <Root>  
                                <Child1>c1</Child1>  
                                <Child2>c2</Child2>  
                            </Root>  
    Dim doc2 As XDocument = <?xml version='1.0'?>  
                            <Root>  
                                <Child1>content1</Child1>  
                                <Child3>content1</Child3>  
                            </Root>  

    Console.WriteLine("Validating doc1")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Validating doc2")  
    errors = False  
    doc2.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc2 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Contents of doc1:")  
    Console.WriteLine(doc1)  

    Console.WriteLine()  
    Console.WriteLine("Contents of doc2:")  
    Console.WriteLine(doc2)  
End Sub  

이 예제는 다음과 같은 출력을 생성합니다.This example produces the following output:

Validating doc1  
doc1 validated  

Validating doc2  
The element 'Root' has invalid child element 'Child3'. List of possible elements expected: 'Child2'.  
doc2 did not validate  

Contents of doc1:  
<Root>  
  <Child1>c1</Child1>  
  <Child2 Att1="Att1 Default Value">c2</Child2>  
</Root>  

Contents of doc2:  
<Root>  
  <Child1>content1</Child1>  
  <Child3>content1</Child3>  
</Root>  

다음 예제에서는 트리를 채웁니다.The following example populates the tree with PSVI. 유효성 검사 후 모든 특성과 해당 요소 트리의 PSVI에 따라 유효 하지 않은 출력 합니다.After validation, it prints all elements and attributes in the tree that are invalid according to the PSVI.


                static void DumpInvalidNodes(XElement el)  
{  
    if (el.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
        Console.WriteLine("Invalid Element {0}",  
            el.AncestorsAndSelf()  
            .InDocumentOrder()  
            .Aggregate("", (s, i) => s + "/" + i.Name.ToString()));  
    foreach (XAttribute att in el.Attributes())  
        if (att.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
            Console.WriteLine("Invalid Attribute {0}",  
                att  
                .Parent  
                .AncestorsAndSelf()  
                .InDocumentOrder()  
                .Aggregate("",  
                    (s, i) => s + "/" + i.Name.ToString()) + "/@" + att.Name.ToString()  
                );  
    foreach (XElement child in el.Elements())  
        DumpInvalidNodes(child);  
}  

static void Main(string[] args)  
{  
   string xsdMarkup =  
        @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
           <xsd:simpleType name='GCType'>  
            <xsd:restriction base='xsd:token'>  
             <xsd:enumeration value='AAA'/>  
             <xsd:enumeration value='BBB'/>  
            </xsd:restriction>  
           </xsd:simpleType>  
           <xsd:element name='Root'>  
            <xsd:complexType>  
             <xsd:sequence>  
              <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
               <xsd:complexType>  
                <xsd:sequence>  
                 <xsd:element name='GrandChild1' type='GCType'/>  
                 <xsd:element name='GrandChild2' type='GCType'/>  
                 <xsd:element name='GrandChild3' type='GCType'/>  
                </xsd:sequence>  
               </xsd:complexType>  
              </xsd:element>  
             </xsd:sequence>  
            </xsd:complexType>  
           </xsd:element>  
          </xsd:schema>";  

    XmlSchemaSet schemas = new XmlSchemaSet();  
    schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  

    XDocument doc1 = new XDocument(  
        new XElement("Root",  
            new XElement("Child1",  
                new XElement("GrandChild1", "AAA"),  
                new XElement("GrandChild2", "ZZZ"),  
                new XElement("GrandChild3", "ZZZ")  
            )  
        )  
    );  

    Console.WriteLine("Validating doc1 ...");  
    bool errors = false;  
    doc1.Validate(schemas, (sender, e) =>  
        {  
            Console.WriteLine(e.Message);  
            errors = true;  
        }, true);  
    Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
}  

                Private Sub DumpInvalidNodes(ByVal el As XElement)  
    If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
        Console.WriteLine("Invalid Element {0}", _  
            el _  
            .AncestorsAndSelf _  
            .InDocumentOrder() _  
            .Aggregate("", _  
                Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()))  
    End If  
    For Each att As XAttribute In el.Attributes()  
        If att.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
            Console.WriteLine("Invalid Attribute {0}", _  
                att _  
                .Parent _  
                .AncestorsAndSelf() _  
                .InDocumentOrder() _  
                .Aggregate("", _  
                    Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()) + _  
                    "/@" + att.Name.ToString())  
        End If  
    Next  
    For Each child As XElement In el.Elements()  
        DumpInvalidNodes(child)  
    Next  
End Sub  

Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  
    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:simpleType name='GCType'>  
                <xsd:restriction base='xsd:token'>  
                    <xsd:enumeration value='AAA'/>  
                    <xsd:enumeration value='BBB'/>  
                </xsd:restriction>  
            </xsd:simpleType>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:sequence>  
                        <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
                            <xsd:complexType>  
                                <xsd:sequence>  
                                    <xsd:element name='GrandChild1' type='GCType'/>  
                                    <xsd:element name='GrandChild2' type='GCType'/>  
                                    <xsd:element name='GrandChild3' type='GCType'/>  
                                </xsd:sequence>  
                            </xsd:complexType>  
                        </xsd:element>  
                    </xsd:sequence>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  

    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>  
                <GrandChild1>AAA</GrandChild1>  
                <GrandChild2>ZZZ</GrandChild2>  
                <GrandChild3>ZZZ</GrandChild3>  
            </Child1>  
        </Root>  

    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  
End Sub  

이 예제는 다음과 같은 출력을 생성합니다.This example produces the following output:

Validating doc1 ...  
The 'GrandChild2' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed.  
The 'GrandChild3' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed.  
doc1 did not validate  
Invalid Element /Root  
Invalid Element /Root/Child1  
Invalid Element /Root/Child1/GrandChild2  
Invalid Element /Root/Child1/GrandChild3  

설명

이 확장 메서드는 유효성을 검사 합니다 XDocument 스키마 콘텐츠 모델에 대 한 준수 XmlSchemaSet합니다.This extension method validates that the XDocument conforms to the schema content model in XmlSchemaSet.

하는 경우 addSchemaInfotrue,이 메서드는 스키마 유효성 검사 이후 정보 집합 (PSVI)를 사용 하 여 XML 트리를 채웁니다.If addSchemaInfo is true, this method populates the XML tree with the post-schema-validation infoset (PSVI).

XML 트리를 PSVI에는 다음과 같은 두 단계가 있습니다.There are two steps to populating the XML tree with the PSVI.

  1. 첫째, 주석의 호출할 수 있도록 트리의 모든 노드에 추가 됩니다 Extensions.GetSchemaInfo 또는 Extensions.GetSchemaInfo 요소 또는 트리에서 특성입니다.First, an annotation is added to all nodes in the tree to enable you to call Extensions.GetSchemaInfo or Extensions.GetSchemaInfo on an element or attribute in the tree.

  2. 둘째, 기본 요소 및 XSD에 정의 된 특성을 XML 트리에 추가 됩니다.Second, default elements and attributes defined in the XSD are added to the XML tree. 중 하나를 호출 하 여는 GetSchemaInfo 메서드 경우 특정 요소 또는 특성으로 추가 된 XSD에서 기본 요소 또는 특성을 확인할 수 있습니다.By calling one of the GetSchemaInfo methods, you can determine if a specific element or attribute was added from the XSD as a default element or attribute.

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler) Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler) Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

이 메서드는 XElement 하위 트리가 지정된 XmlSchemaObjectXmlSchemaSet을 준수하는지 확인합니다.This method validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet.

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XElement ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public static void Validate (this System.Xml.Linq.XElement source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler);
static member Validate : System.Xml.Linq.XElement * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler -> unit

매개 변수

source
XElement XElement XElement

유효성을 검사할 XElement입니다.The XElement to validate.

partialValidationType
XmlSchemaObject XmlSchemaObject XmlSchemaObject

유효성을 검사할 하위 트리를 지정하는 XmlSchemaObject입니다.An XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet XmlSchemaSet XmlSchemaSet

유효성을 검사할 XmlSchemaSet입니다.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler ValidationEventHandler ValidationEventHandler

판독기에서 유효성 검사 오류를 발견했을 때 수행되는 이벤트의 ValidationEventHandler입니다.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. null인 경우 유효성 검사 오류가 있을 때 예외가 throw됩니다.If null, throws an exception upon validation errors.

예외

XSD(XML 스키마 정의) 언어 유효성 검사 오류가 발생한 경우 throw됩니다.Thrown for XML Schema Definition Language (XSD) validation errors.

예제


                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
           <xsd:complexType>  
            <xsd:sequence>  
             <xsd:element name='GrandChild1' minOccurs='1' maxOccurs='1'/>  
             <xsd:element name='GrandChild2' minOccurs='1' maxOccurs='2'/>  
            </xsd:sequence>  
           </xsd:complexType>  
          </xsd:element>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  

XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  

XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1",  
            new XElement("GrandChild1", "gc"),  
            new XElement("GrandChild2", "gc")  
        )  
    )  
);  

Console.WriteLine("Validating doc1 ...");  
bool errors = false;  
doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
Console.WriteLine("Validating Child1 after first edit ...");  
XElement child1 = doc1.Element("Root").Element("Child1");  
child1.Add(new XElement("GrandChild2", "gc"));  
errors = false;  
child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("child1 {0}", errors ? "did not validate" : "validated");  

// the following makes the Child1 element invalid according to the schema  
child1.Add(new XElement("GrandChild3", "gc"));  
Console.WriteLine();  
Console.WriteLine("Validating Child1 after second edit ...");  
child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("child1 {0}", errors ? "did not validate" : "validated");  

                Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  

    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:sequence>  
                        <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
                            <xsd:complexType>  
                                <xsd:sequence>  
                                    <xsd:element name='GrandChild1' minOccurs='1' maxOccurs='1'/>  
                                    <xsd:element name='GrandChild2' minOccurs='1' maxOccurs='2'/>  
                                </xsd:sequence>  
                            </xsd:complexType>  
                        </xsd:element>  
                    </xsd:sequence>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  

    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>  
                <GrandChild1>gc</GrandChild1>  
                <GrandChild2>gc</GrandChild2>  
            </Child1>  
        </Root>  

    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Validating Child1 after first edit ...")  
    Dim child1 As XElement = doc1.Element("Root").Element("Child1")  
    child1.Add(<GrandChild2>gc</GrandChild2>)  
    errors = False  
    child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, AddressOf XSDErrors)  
    Console.WriteLine("child1 {0}", IIf(errors, "did not validate", "validated"))  

    ' the following makes the Child1 element invalid according to the schema  
    child1.Add(<GrandChild3>gc</GrandChild3>)  
    Console.WriteLine()  
    Console.WriteLine("Validating Child1 after second edit ...")  
    child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, AddressOf XSDErrors)  
    Console.WriteLine("child1 {0}", IIf(errors, "did not validate", "validated"))  
End Sub  

이 예제는 다음과 같은 출력을 생성합니다.This example produces the following output:

Validating doc1 ...  
doc1 validated  

Validating Child1 after first edit ...  
child1 validated  

Validating Child1 after second edit ...  
The element 'Child1' has invalid child element 'GrandChild3'.  
child1 did not validate  

설명

하위 트리의 유효성을 검사 하는이 메서드를 사용할 수 있습니다 (사용 하 여는 XElement 루트) 스키마를 준수 합니다.You can use this method to validate that a sub-tree (with an XElement at its root) conforms to a schema. 일반적으로 하위 트리를 수정 하 고 여전히 해당 스키마를 준수 하는지 확인 하려는 경우이 메서드를 사용 합니다.You typically use this method when you have modified a sub-tree, and you want to make sure that it still conforms to its schema. 전체 문서를 유효성을 검사할 수 있지만에 처리 시간이 적게 걸립니다 하위 트리.You could validate the entire document, but it takes less processing time to validate a just a sub-tree.

전달 하는 경우 null 에 대 한 validationEventHandler,이 메서드를 유효성 검사 오류에 예외를 발생 시킵니다.If you pass null for validationEventHandler, then this method raises an exception upon validation errors. 유효성 검사 경고에는 예외가 발생 하지 않습니다.Validation warnings will not raise an exception.

인스턴스를 사용 하면 하위 트리의 유효성을 검사할 XmlSchemaObject합니다.To validate a sub-tree, you use an instance of XmlSchemaObject. 다양 한 방법으로이 인스턴스를 가져올 수 있습니다.You can obtain this instance in various ways. 쉬운 아래와 같습니다.An easy way is as follows:

  1. 문서 스키마를 준수 하는지 확인 합니다.Validate that a document conforms to a schema.

  2. 스키마 유효성 검사 이후 정보 집합 (PSVI) 호출 하 여 추가 된 Validate 확장 메서드.Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. 호출 된 GetSchemaInfo 확장 메서드를 구현 하는 개체 검색 IXmlSchemaInfo합니다.Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. 검색된 된 개체에서 가져올 수 있습니다는 XmlSchemaObject합니다.From the retrieved object, you can get an XmlSchemaObject.

인스턴스를 만든 후는 XmlSchemaObject에 하위 트리의 유효성을 검사할이 메서드를 사용할 수 있습니다.After you have an instance of an XmlSchemaObject, you can use this method to validate an sub-tree.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean) Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean) Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

XAttribute가 지정된 XmlSchemaObjectXmlSchemaSet을 준수하는지 확인하고, 선택적으로 XML 트리를 PSVI(스키마 유효성 검사 이후 정보 집합)로 채울 수 있습니다.Validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XAttribute ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XAttribute source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler, bool addSchemaInfo);
static member Validate : System.Xml.Linq.XAttribute * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler * bool -> unit

매개 변수

source
XAttribute XAttribute XAttribute

유효성을 검사할 XAttribute입니다.The XAttribute to validate.

partialValidationType
XmlSchemaObject XmlSchemaObject XmlSchemaObject

유효성을 검사할 하위 트리를 지정하는 XmlSchemaObject입니다.An XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet XmlSchemaSet XmlSchemaSet

유효성을 검사할 XmlSchemaSet입니다.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler ValidationEventHandler ValidationEventHandler

판독기에서 유효성 검사 오류를 발견했을 때 수행되는 이벤트의 ValidationEventHandler입니다.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. null인 경우 유효성 검사 오류가 있을 때 예외가 throw됩니다.If null, throws an exception upon validation errors.

addSchemaInfo
Boolean Boolean Boolean

PSVI(스키마 유효성 검사 이후 정보 집합)를 채울지 여부를 나타내는 Boolean입니다.A Boolean indicating whether to populate the post-schema-validation infoset (PSVI).

예외

XSD(XML 스키마 정의) 언어 유효성 검사 오류가 발생한 경우 throw됩니다.Thrown for XML Schema Definition Language (XSD) validation errors.

예제


                static void DumpInvalidNodes(XElement el)  
{  
    if (el.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
        Console.WriteLine("Invalid Element {0}",  
            el.AncestorsAndSelf()  
            .InDocumentOrder()  
            .Aggregate("", (s, i) => s + "/" + i.Name.ToString()));  
    foreach (XAttribute att in el.Attributes())  
        if (att.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
            Console.WriteLine("Invalid Attribute {0}",  
                att  
                .Parent  
                .AncestorsAndSelf()  
                .InDocumentOrder()  
                .Aggregate("",  
                    (s, i) => s + "/" + i.Name.ToString()) + "/@" + att.Name.ToString()  
                );  
    foreach (XElement child in el.Elements())  
        DumpInvalidNodes(child);  
}  

static void Main(string[] args)  
{  
    string xsdMarkup =  
        @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:simpleContent>  
          <xsd:extension base='xsd:string'>  
           <xsd:attribute name='Lang' use='required'>  
            <xsd:simpleType>  
             <xsd:restriction base='xsd:token'>  
              <xsd:enumeration value='C#'/>  
              <xsd:enumeration value='VB'/>  
             </xsd:restriction>  
            </xsd:simpleType>  
           </xsd:attribute>  
          </xsd:extension>  
         </xsd:simpleContent>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  

    XmlSchemaSet schemas = new XmlSchemaSet();  
    schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  

    XDocument doc1 = new XDocument(  
        new XElement("Root",  
            new XAttribute("Lang", "C#")  
        )  
    );  

    Console.WriteLine("Validating doc1 ...");  
    bool errors = false;  
    doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  

    Console.WriteLine();  
    Console.WriteLine("Validating Lang attribute ...");  
    XAttribute lang = doc1.Element("Root").Attribute("Lang");  

    errors = false;  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  

    // the following makes the Lang attribute invalid according to the schema  
    lang.Value = "VC";  

    Console.WriteLine();  
    Console.WriteLine("Validating Lang attribute ...");  

    errors = false;  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
}  

                Private Sub DumpInvalidNodes(ByVal el As XElement)  
    If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
        Console.WriteLine("Invalid Element {0}", _  
            el _  
            .AncestorsAndSelf _  
            .InDocumentOrder() _  
            .Aggregate("", _  
                Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()))  
    End If  
    For Each att As XAttribute In el.Attributes()  
        If att.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
            Console.WriteLine("Invalid Attribute {0}", _  
                att _  
                .Parent _  
                .AncestorsAndSelf() _  
                .InDocumentOrder() _  
                .Aggregate("", _  
                    Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()) + _  
                    "/@" + att.Name.ToString())  
        End If  
    Next  
    For Each child As XElement In el.Elements()  
        DumpInvalidNodes(child)  
    Next  
End Sub  

Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  

    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:simpleContent>  
                        <xsd:extension base='xsd:string'>  
                            <xsd:attribute name='Lang' use='required'>  
                                <xsd:simpleType>  
                                    <xsd:restriction base='xsd:token'>  
                                        <xsd:enumeration value='C#'/>  
                                        <xsd:enumeration value='VB'/>  
                                    </xsd:restriction>  
                                </xsd:simpleType>  
                            </xsd:attribute>  
                        </xsd:extension>  
                    </xsd:simpleContent>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  

    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = <?xml version='1.0'?>  
                            <Root Lang='C#'/>  

    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  

    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  
    Dim lang As XAttribute = doc1.Element("Root").Attribute("Lang")  

    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  

    ' the following makes the Lang attribute invalid according to the schema  
    lang.Value = "VC"  

    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  

    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  
End Sub  

이 예제는 다음과 같은 출력을 생성합니다.This example produces the following output:

Validating doc1 ...  
doc1 validated  

Validating Lang attribute ...  
lang validated  

Validating Lang attribute ...  
The 'Lang' attribute is invalid - The value 'VC' is invalid according to its datatype 'Token' - The Enumeration constraint failed.  
lang did not validate  
Invalid Attribute /Root/@Lang  

설명

이 메서드를 사용 하 여 유효성을 검사 하는 XAttribute 스키마를 준수 합니다.You can use this method to validate that an XAttribute conforms to a schema. 일반적으로 특성을 수정 하 고 여전히 해당 스키마를 준수 하는지 확인 하려는 경우이 메서드를 사용 합니다.You typically use this method when you have modified an attribute, and you want to make sure that it still conforms to its schema. 전체 문서를 유효성을 검사할 수 있지만 특성만 유효성을 검사 하는 처리 시간이 적게 걸립니다.You could validate the entire document, but it takes less processing time to validate just the attribute.

하는 경우 addSchemaInfotrue,이 메서드는 스키마 유효성 검사 이후 정보 집합 (PSVI)를 사용 하 여 특성을 채웁니다.If addSchemaInfo is true, this method populates the attribute with the post-schema-validation infoset (PSVI). PSVI 사용 하 여 XML 트리를 채운 후 호출할 수 있습니다 Extensions.GetSchemaInfo 유효성이 검사 된 특성입니다.After you have populated the XML tree with the PSVI, you can call Extensions.GetSchemaInfo on the validated attribute. 반환 된 데이터를 사용 하는 코드를 작성 하는 경우에 유용 GetSchemaInfo합니다.This is useful if you are writing code that relies on data returned by GetSchemaInfo.

전달 하는 경우 null 에 대 한 validationEventHandler,이 메서드를 유효성 검사 오류에 예외를 발생 시킵니다.If you pass null for validationEventHandler, then this method raises an exception upon validation errors. 유효성 검사 경고에는 예외가 발생 하지 않습니다.Validation warnings will not raise an exception.

인스턴스를 사용 하면 특성의 유효성을 검사할 XmlSchemaObject합니다.To validate an attribute, you use an instance of XmlSchemaObject. 다양 한 방법으로이 인스턴스를 가져올 수 있습니다.You can obtain this instance in various ways. 쉬운 아래와 같습니다.An easy way is as follows:

  1. 문서 스키마를 준수 하는지 확인 합니다.Validate that a document conforms to a schema.

  2. 스키마 유효성 검사 이후 정보 집합 (PSVI) 호출 하 여 추가 된 Validate 확장 메서드.Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. 호출 된 GetSchemaInfo 확장 메서드를 구현 하는 개체 검색 IXmlSchemaInfo합니다.Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. 검색된 된 개체에서 가져올 수 있습니다는 XmlSchemaObject합니다.From the retrieved object, you can get an XmlSchemaObject.

인스턴스를 만든 후는 XmlSchemaObject, 특성의 유효성을 검사 하려면이 메서드를 사용할 수 있습니다.After you have an instance of an XmlSchemaObject, you can use this method to validate an attribute.

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean) Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean) Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

XElement 하위 트리가 지정된 XmlSchemaObjectXmlSchemaSet을 준수하는지 확인하고, 선택적으로 XML 트리를 PSVI(스키마 유효성 검사 이후 정보 집합)로 채울 수 있습니다.Validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XElement ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XElement source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler, bool addSchemaInfo);
static member Validate : System.Xml.Linq.XElement * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler * bool -> unit

매개 변수

source
XElement XElement XElement

유효성을 검사할 XElement입니다.The XElement to validate.

partialValidationType
XmlSchemaObject XmlSchemaObject XmlSchemaObject

유효성을 검사할 하위 트리를 지정하는 XmlSchemaObject입니다.An XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet XmlSchemaSet XmlSchemaSet

유효성을 검사할 XmlSchemaSet입니다.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler ValidationEventHandler ValidationEventHandler

판독기에서 유효성 검사 오류를 발견했을 때 수행되는 이벤트의 ValidationEventHandler입니다.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. null인 경우 유효성 검사 오류가 있을 때 예외가 throw됩니다.If null, throws an exception upon validation errors.

addSchemaInfo
Boolean Boolean Boolean

PSVI(스키마 유효성 검사 이후 정보 집합)를 채울지 여부를 나타내는 Boolean입니다.A Boolean indicating whether to populate the post-schema-validation infoset (PSVI).

예외

XSD(XML 스키마 정의) 언어 유효성 검사 오류가 발생한 경우 throw됩니다.Thrown for XML Schema Definition Language (XSD) validation errors.

예제


                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
          <xsd:element name='Child2' minOccurs='1' maxOccurs='1'>  
           <xsd:complexType>  
            <xsd:simpleContent>  
             <xsd:extension base='xsd:string'>  
              <xsd:attribute name='Att1' default='Att1 Default Value'/>  
             </xsd:extension>  
            </xsd:simpleContent>  
           </xsd:complexType>  
          </xsd:element>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  

XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "c1"),  
        new XElement("Child2", "c2")  
    )  
);  

XDocument doc2 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child3", "content1")  
    )  
);  

Console.WriteLine("Validating doc1");  
bool errors = false;  
doc1.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
Console.WriteLine("Validating doc2");  
errors = false;  
doc2.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     }, true);  
Console.WriteLine("doc2 {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
Console.WriteLine("Contents of doc1:");  
Console.WriteLine(doc1);  

Console.WriteLine();  
Console.WriteLine("Contents of doc2:");  
Console.WriteLine(doc2);  

                Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  
    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:sequence>  
                        <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
                        <xsd:element name='Child2' minOccurs='1' maxOccurs='1'>  
                            <xsd:complexType>  
                                <xsd:simpleContent>  
                                    <xsd:extension base='xsd:string'>  
                                        <xsd:attribute name='Att1' default='Att1 Default Value'/>  
                                    </xsd:extension>  
                                </xsd:simpleContent>  
                            </xsd:complexType>  
                        </xsd:element>  
                    </xsd:sequence>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>c1</Child1>  
            <Child2>c2</Child2>  
        </Root>  

    Dim doc2 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>content1</Child1>  
            <Child3>content1</Child3>  
        </Root>  

    Console.WriteLine("Validating doc1")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Validating doc2")  
    errors = False  
    doc2.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc2 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Contents of doc1:")  
    Console.WriteLine(doc1)  

    Console.WriteLine()  
    Console.WriteLine("Contents of doc2:")  
    Console.WriteLine(doc2)  
End Sub  

이 예제는 다음과 같은 출력을 생성합니다.This example produces the following output:

Validating doc1  
doc1 validated  

Validating doc2  
The element 'Root' has invalid child element 'Child3'. List of possible elements expected: 'Child2'.  
doc2 did not validate  

Contents of doc1:  
<Root>  
  <Child1>c1</Child1>  
  <Child2 Att1="Att1 Default Value">c2</Child2>  
</Root>  

Contents of doc2:  
<Root>  
  <Child1>content1</Child1>  
  <Child3>content1</Child3>  
</Root>  

설명

하위 트리의 유효성을 검사 하는이 메서드를 사용할 수 있습니다 (사용 하 여는 XElement 하위 트리의 루트로) 스키마를 준수 합니다.You can use this method to validate that a sub-tree (with an XElement at the root of the sub-tree) conforms to a schema. 일반적으로 하위 트리를 수정 하 고 여전히 해당 스키마를 준수 하는지 확인 하려는 경우이 메서드를 사용 합니다.You typically use this method when you have modified a sub-tree, and you want to make sure that it still conforms to its schema. 전체 문서를 유효성을 검사할 수 있지만에 처리 시간이 적게 걸립니다 하위 트리.You could validate the entire document, but it takes less processing time to validate a just a sub-tree.

하는 경우 addSchemaInfotrue, 다음이 메서드는 스키마 유효성 검사 이후 정보 집합 (PSVI)를 사용 하 여 XML 트리를 채웁니다.If addSchemaInfo is true, then this method populates the XML tree with the post-schema-validation infoset (PSVI).

PSVI 사용 하 여 XML 트리를 채우는 방법은 두 가지 측면이 있습니다.There are two aspects of populating the XML tree with the PSVI.

먼저 주석을 추가할 트리의 모든 노드는 이제 호출할 수 있습니다 GetSchemaInfo 요소 또는 트리에서 특성입니다.First, an annotation is added to all nodes in the tree such that you can now call GetSchemaInfo on an element or attribute in the tree.

둘째, 기본 요소 및 XSD에 정의 된 특성을 XML 트리에 추가 됩니다.Second, default elements and attributes defined in the XSD are added to the XML tree. 중 하나를 호출 하 여는 GetSchemaInfo 메서드 경우 특정 요소 또는 특성으로 추가 된 XSD에서 기본 요소 또는 특성을 확인할 수 있습니다.By calling one of the GetSchemaInfo methods, you can determine if a specific element or attribute was added from the XSD as a default element or attribute.

전달 하는 경우 null 에 대 한 validationEventHandler,이 메서드를 유효성 검사 오류에 예외를 발생 시킵니다.If you pass null for validationEventHandler, then this method raises an exception upon validation errors. 유효성 검사 경고에는 예외가 발생 하지 않습니다.Validation warnings will not raise an exception.

인스턴스를 사용 하면 하위 트리의 유효성을 검사할 XmlSchemaObject합니다.To validate a sub-tree, you use an instance of XmlSchemaObject. 다양 한 방법으로이 인스턴스를 가져올 수 있습니다.You can obtain this instance in various ways. 쉬운 아래와 같습니다.An easy way is as follows:

  1. 문서 스키마를 준수 하는지 확인 합니다.Validate that a document conforms to a schema.

  2. 스키마 유효성 검사 이후 정보 집합 (PSVI) 호출 하 여 추가 된 Validate 확장 메서드.Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. 호출 된 GetSchemaInfo 확장 메서드를 구현 하는 개체 검색 IXmlSchemaInfo합니다.Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. 검색된 된 개체에서 가져올 수 있습니다는 XmlSchemaObject합니다.From the retrieved object, you can get an XmlSchemaObject.

인스턴스를 만든 후는 XmlSchemaObject,이 메서드를 사용 하 여 하위 트리의 유효성을 검사할 수 있습니다...After you have an instance of an XmlSchemaObject, you can use this method to validate a sub-tree..

적용 대상