프로그래밍 기술/XML.NET

[XML.NET] 15. 유효성 검사 설정 XmlReader 개체 만들기

언제나휴일 2016. 4. 18. 13:11
반응형

유효성 검사 설정 XmlReader 개체 만들기


 이번에는 XmlSchemaSet 개체로 유효성 검사를 할 수 있게 XmlReader 개체를 생성하는 방법을 살펴볼게요.

 

예제에서는 XmlSchemaSet 개체를 생성하여 이미 작성한 스키마 파일 "data.xsd"의 내용을 XmlSchemaSet에 추가하고 XmlReaderSettings 개체의 Schemas 속성에 설정합니다. 그리고 XmlReader 개체를 이용하여 데이터 소스에 유효성이 위배한 부분을 발견할 때 처리하기 위한 이벤트 핸들러를 추가합니다.

 

 이와 같은 작업을 한 후에 XmlReaderSettings 개체를 전달하여 XmlReader 개체를 생성하면 이후에 읽기 작업 등에서 데이터 소스에 유효성이 위배한 부분을 발견하면 설정한 이벤트 핸들러가 동작합니다.

 

Program.cs


static void Main(string[] args)

{

    XmlSchemaSet sc = new XmlSchemaSet();

    sc.Add("urn:books-schema", "data.xsd");

 

    XmlReaderSettings settings = new XmlReaderSettings();

    settings.ValidationType = ValidationType.Schema;

    settings.Schemas = sc;

    settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);

 

    XmlReader reader = XmlReader.Create("data.xml", settings);

    WirteConsole(reader);

    reader.Close();

}

private static void ValidationCallBack(object sender, ValidationEventArgs e)

{

    Console.WriteLine("유효성 위배: {0}", e.Message);

}

private static void WirteConsole(XmlReader reader)

{

    XmlWriter xwriter = XmlWriter.Create(Console.Out);

    xwriter.WriteNode(reader, false);

    xwriter.Close();

    Console.WriteLine();

}

[소스] 유효성 검사를 설정한 XmlReader 개체 만들기 예제 코드

 

 유효성 검사는 XmlSchemaSet 개체를 이용하는 방법 외에도 DTD를 사용하거나 래핑된 XmlReader 개체를 사용하는 방법 등이 있으니 MSDN을 참고하시기 바랍니다.

 

 

 다음은 미리 작성한 스키마 파일 "data.xsd"와 데이터 소스로 사용할 "data.xml" 파일의 내용입니다.


data.xml


data.xsd


 

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:books-schema"

        elementFormDefault="qualified"    targetNamespace="urn:books-schema">

 <xsd:element name="books" type="booksType"/>

 <xsd:complexType name="booksType">

  <xsd:sequence maxOccurs="unbounded">

   <xsd:element name="book"  type="bookType"/>

  </xsd:sequence>

 </xsd:complexType>

 <xsd:complexType name="bookType">

  <xsd:sequence>

   <xsd:element name="title" type="xsd:string"/>

   <xsd:element name="price"  type="xsd:int"/>

  </xsd:sequence>

 </xsd:complexType>

</xsd:schema>

[문서] data.xsd 문서 내용

 

<?xml version="1.0" encoding="utf-8"?>

<books xmlns="urn:books-schema">

  <book>

    <title>XML.NET ADO.NET</title>

    <price>2200.0</price>

  </book>

</books>

[문서] data.xml 문서 내용

 

유효성 검사를 설정한 XmlReader 개체 만들기 예제 실행화면


[그림] 실행 화면

 

반응형