다음을 통해 공유


XmlReader에서 인라인 XML 스키마를 사용하여 유효성 검사

업데이트: November 2007

인라인 XSD(XML 스키마 정의 언어) 스키마에 대해 XML 파일의 유효성을 검사할 수 있습니다. XmlReader를 만들기 전에 ProcessInlineSchema 옵션이 활성화되도록 XmlReaderSettings.ValidationFlags 속성을 변경합니다.

참고:

인라인 스키마가 루트 요소의 자식 요소로 나타나기 때문에 인라인 스키마 유효성 검사를 수행할 경우 루트 요소의 유효성을 검사할 수 없습니다. 루트 요소에 대해 유효성 검사 경고가 생성됩니다.

예제

다음 예제에서는 인라인 XML 스키마를 사용하여 XML 파일의 유효성을 검사합니다. 유효성 검사 경고를 표시하도록 판독기를 구성했으므로 루트 요소에서 예상한 경고가 나타납니다.

Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.IO

public class ValidXSD 

  public shared sub Main() 

    ' Set the validation settings.
    Dim settings as XmlReaderSettings = new XmlReaderSettings()
    settings.ValidationType = ValidationType.Schema
    settings.ValidationFlags = settings.ValidationFlags Or XmlSchemaValidationFlags.ProcessInlineSchema
    settings.ValidationFlags = settings.ValidationFlags Or XmlSchemaValidationFlags.ReportValidationWarnings
      AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack

    ' Create the XmlReader object.
    Dim reader as XmlReader = XmlReader.Create("inlineSchema.xml", settings)

    ' Parse the file. 
    while (reader.Read())
    end while
  end sub

  ' Display any warnings or errors.
  private shared sub ValidationCallBack (sender as object, args as ValidationEventArgs)
     if (args.Severity=XmlSeverityType.Warning)
       Console.WriteLine("   Warning: Matching schema not found.  No validation occurred." + args.Message)
     else
        Console.WriteLine("   Validation error: " + args.Message)
     end if
  end sub 

end class 
using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;

public class ValidXSD {

  public static void Main() {

    // Set the validation settings.
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
    settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
    settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);

    // Create the XmlReader object.
    XmlReader reader = XmlReader.Create("inlineSchema.xml", settings);

    // Parse the file. 
    while (reader.Read());

  }

  // Display any warnings or errors.
  private static void ValidationCallBack (object sender, ValidationEventArgs args) {
     if (args.Severity==XmlSeverityType.Warning)
       Console.WriteLine("\tWarning: Matching schema not found.  No validation occurred." + args.Message);
     else
        Console.WriteLine("\tValidation error: " + args.Message);

  }  

}

입력

이 예제에서는 inlineSchema.xml 파일을 입력으로 사용합니다.

<root>
<!--Start of schema-->
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
            xmlns='xsdHeadCount'
            targetNamespace='xsdHeadCount'>
    <xs:element name='HeadCount'>
        <xs:complexType>
            <xs:sequence>
                <xs:element name='ID' type='xs:unsignedShort' maxOccurs='unbounded' />
            </xs:sequence>
            <xs:attribute name='division' type='xs:string' use='optional' default='QA'/>
        </xs:complexType>
    </xs:element>
</xs:schema>
<!--End of schema-->
<hc:HeadCount xmlns:hc='xsdHeadCount'>
    <ID>12365</ID>
    <ID>43295</ID>
    <division>Accounting</division>
</hc:HeadCount>
</root>

출력

경고: 일치하는 스키마를 찾을 수 없습니다. 유효성 검사가 실행되지 않았습니다. 'root' 요소에 대한 스키마 정보를 찾을 수 없습니다.

유효성 검사 오류: 'xsdHeadCount:HeadCount' 요소에 잘못된 자식 요소 'division'이 있습니다. 'ID'가 있어야 합니다.

참고 항목

개념

XmlReader로 XML 읽기

기타 리소스

XmlReader를 사용하여 XML 데이터의 유효성 검사