다음을 통해 공유


인라인 XSD(XML 스키마)를 사용하여 유효성 검사

XmlValidatingReader를 사용하여 인라인 XSD(XML 스키마 정의 언어) 스키마의 유효성을 검사할 수 있습니다.

참고참고

XmlValidatingReader 클래스는 .NET Framework 버전 2.0에서 사용되지 않습니다.XmlReaderSettings 클래스와 Create 메서드를 사용하여 유효성 검사 XmlReader 인스턴스를 만들 수 있습니다.자세한 내용은 XmlReader를 사용하여 XML 데이터의 유효성 검사를 참조하십시오.

예제

다음 코드 예제에서는 XmlTextReader를 사용하는 XmlValidatingReader를 만듭니다. 인라인 XML 스키마에 대해 입력 파일 HeadCount.xml의 유효성을 검사합니다.

참고참고

인라인 스키마가 루트 요소의 자식 요소로 나타나기 때문에 인라인 스키마 유효성 검사를 수행할 경우 루트 요소의 유효성을 검사할 수 없습니다.ValidationType 속성이 Schema로 설정되는 경우 XmlValidatingReader에서는 루트 요소에 대해 경고를 throw합니다.

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


Namespace ValidationSample
    
   Class Sample
      Private Shared _ValidationErrorsCount As Integer = 0
      
      
      Public Shared Sub Main()
         Dim stream As New FileStream("HeadCount.xml", FileMode.Open)
         Dim vr As New XmlValidatingReader(stream, XmlNodeType.Element, Nothing)
         
         vr.ValidationType = ValidationType.Schema
         AddHandler vr.ValidationEventHandler, AddressOf ValidationHandler
         
         While vr.Read()
         End While
         Console.WriteLine("Validation finished: {0} validation errors", _ValidationErrorsCount)
      End Sub
      ' Main
      
      
      Public Shared Sub ValidationHandler(sender As Object, args As ValidationEventArgs)
         Console.WriteLine("***Validation error")
         Console.WriteLine("Severity:{0}", args.Severity)
         Console.WriteLine("Message:{0}", args.Message)
         _ValidationErrorsCount += 1
      End Sub
      ' ValidationHandler
   End Class
   ' Sample
End Namespace 
' ValidationSample
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

namespace ValidationSample
{
   class Sample
   {
      static int _ValidationErrorsCount = 0;

      public static void Main()
      {
         FileStream stream = new FileStream("HeadCount.xml", FileMode.Open);
         XmlValidatingReader vr = new XmlValidatingReader(stream, XmlNodeType.Element, null);

         vr.ValidationType = ValidationType.Schema;
         vr.ValidationEventHandler += new ValidationEventHandler (ValidationHandler);

         while(vr.Read());
         Console.WriteLine("Validation finished: {0} validation errors", _ValidationErrorsCount);
      }

      public static void ValidationHandler(object sender, ValidationEventArgs args)
      {
         Console.WriteLine("***Validation error");
         Console.WriteLine("\tSeverity:{0}", args.Severity);
         Console.WriteLine("\tMessage  :{0}", args.Message);
         _ValidationErrorsCount++;
      }
   }
}

다음에서는 유효성을 검사할 입력 파일 HeadCount.xml의 내용을 요약합니다.

<root>
<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='Name' type='xs:string' maxOccurs='unbounded'/>
            </xs:sequence>
            <xs:attribute name='division' type='xs:string' use='optional' default='QA'/>
        </xs:complexType>
    </xs:element>
</xs:schema>
<hc:HeadCount xmlns:hc='xsdHeadCount'>
    <Name>Waldo Pepper</Name>
    <Name>Red Pepper</Name>
</hc:HeadCount>
</root>

다음 코드 예제에서는 XmlTextReader를 사용하는 XmlValidatingReader를 만듭니다. 인라인 XML 스키마에 대해 입력 파일 Sample5.xml의 유효성을 검사합니다.

Dim tr As New XmlTextReader("Sample5.xml")
Dim vr As New XmlValidatingReader(tr)
vr.ValidationType = ValidationType.Schema
AddHandler vr.ValidationEventHandler, AddressOf ValidationCallBack
While vr.Read()
   Console.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name)
End While
XmlTextReader tr = new XmlTextReader("Sample5.xml");
XmlValidatingReader vr = new XmlValidatingReader(tr);
vr.ValidationType = ValidationType.Schema;
vr.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
while(vr.Read()) {
    Console.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name);
    }

다음에서는 유효성을 검사할 입력 파일 Sample5.xml의 내용을 요약합니다.

<test>
  <schema targetNamespace='test' xmlns='http://www.w3.org/2001/XMLSchema' > 
    <element name='zip' type='positiveInteger'/> 
  </schema>

  <t:zip   xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'  xmlns:t='test'>
    123
  </t:zip>
</test>

참고 항목

개념

XmlReader로 XML 읽기

기타 리소스

XmlReader 클래스 사용