블로그 이미지
Kanais
Researcher & Developer 퍼즐을 완성하려면 퍼즐 조각들을 하나 둘씩 맞춰나가야 한다. 인생의 퍼즐 조각들을 하나 둘씩 맞춰나가다 보면 인생이란 퍼즐도 완성되는 날이 오려나...?

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

2015. 6. 5. 15:37 Programming/.NET


작성날짜 : 2011-04-24



참고 서적 : About ADO.NET

 

개요

XML은 .NET과 ADO.NET에서의 핵심 요소이다. .NET에서는 많은 XML 관련 클래스들을 지원하고 있다. 그 중에서도 대표적인 것이 XmlReader 클래스와 XmlReader 클래스와 유사한 클래스인 XmlTextReader, XmlValidatingReader, XmlNodeReader가 있는데 이러한 것은 XmlReader가 실제로 구현된 예이다.

 

XmlReader 클래스는 XML 문서를 인식하고 읽기 위한 클래스이다. XmlReader의 특징이라면 XML 데이터의 스트림에 비해 속도가 빠르고 캐시오디지 않는다는 것이다. 또한 ForwardOnly 방식으로 Xml 데이터에 접근하기 때문에 속도 면에서 효율적이다. XmlReader는 Read 메소드를 이용해서 다음 데이터로 이동하며 읽기를 수행하고 각각의 속성 값들은 현재 XmlReader가 배치된 노드의 값을 반영하여 보여준다.

 

XmlReader 클래스의 구현

XmlReader w3c(www.w3c.org의 XML 1.0 및 Namespaces in XML 권장사항을 따르고 있다. XML과 Namespace in XML의 표준안과 관련된 정보들은 HTML, XML 등의 표준화 기구인 http://www.w3c.org 에서 자세히 살펴 볼 수 있다. XmlReader는 다음과 같은 클래스에서 구현된다.

클래스

설  명

XmlTextReader

XmlTextReader 클래스는 XmlReader를 가장 빠르게 구현하는 클래스이다. XmlReade는 Well-formed XML 문서인지에 대한 검사는 이루어지지만 데이터 유효성 검사는 하지 않는다. 또한 XmlTextReader 클래스는 일반 엔터티를 확장할 수 없고 기본 특성을 지원하지 않는다.

XmlValidatingReader

XmlValidatingReader는 XmlTextReader와는 달리 DTD나 스키마를 사용하여 데이터의 유효성을 검사할 수 있는 XmlReader를 구현한다. 또한 일반 엔터티를 확장할 수 있고 기본 특성을 지원하고 있다.

XmlNodeReader

XmlNodeReader는 XmlNode에서 XML 데이터를 읽는 XmlReader를 만든다.

  

XmlConvert 클래스

XML 문서의 데이터형의 변환을 위해서는 XmlConvert 클래스를 이용하면 편리하게 형 변환을 할 수 있다. 예를 들면 다음과 같은 구문을 통해 String 형의 데이터를 Double 형으로 변환할 수 있다. XmlConvert 클래스는 다양한 데이터형에 대한 형 변환 메소드들을 제공하고 있다.

 

Double price = XmlConvert.ToDouble(reader.Value);

 

XmlReader를 이용하는 경우 XML 구문 분석시에 오류가 발생하면 XmlException을 발생한다. 이와 같이 오류가 발생한 경우에는 XmlReader 상태는 정확하게 예측할 수 없게 된다. 단지 오류가 발생한 것을 조사하여 오류 처리를 할 수 있다.

 

XmlReader 기본 사용법

먼저 간단한 Xml 문서를 작성한다.

 



위의 파일을 C:/xml 폴더를 만들어서 Book.xml라는 이름으로 저장한다.


VS.NET
에 의해 자동으로 생성된 소스 부분 중에서 가장 윗부분에 있는 네임스페이스에 using 예약어를 통해 다음과 같이 2개의 네임 스페이스를 추가한다.

using System;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Xml;

 

VS.NET을 이용하여 default.aspx에 Page_Load 이벤트 핸들러 부분을 다음과 같이 수정한다.

protected void Page_Load(object sender, EventArgs e)

        {

            string filename = "C:/xml/Book.xml";

            XmlTextReader xtReader = null;

            try

            {

                xtReader = new XmlTextReader(filename);

                Response.Write("XmlTextReader 개체가 생성되었습니다.<br>");

                while (xtReader.Read())

                {

                    Response.Write(xtReader.Name.ToString());

                    Response.Write(xtReader.Value.ToString());

                    Response.Write("<br>");

                }

            }

            catch (Exception ex)

            {

                Response.Write("오류가 발생하였습니다.<br>");

                Response.Write("오류내용" + ex.ToString());

            }

            finally

            {

                if (xtReader != null)

                {

                    xtReader.Close();

                }

            }

        }

 

위의 코드를 실행하면 다음과 같은 결과를 볼 수 있다.

 


결과를 보면 아까 XML 문서보다 더 썰렁한 것을 볼 수 있다. 이렇게 썰헝한 결과가 나온 이유는 XML 문서를 XmlTextReader로 읽어서 XML 문서 중에서 Name과 Value 부분만 출력하였기 때문이다.

 

XmlReader 클래스의 속성

Public 속성

  

AttributeCount

현재 노드에 포함된 특성 수를 가져온다.

BaseURI

현재 노드의 기본 URI를 가져온다.

CanResolveEntity

XmlReader가 엔터티를 구문 분석하고 확인할 수 있는지의 여부를 가져온다.

Depth

현재 노드의 수준을 가져온다.

EOF

XmlReader가 스트림의 끝에 배치되었는지 여부를 나타내는 값을 가져온다.

HasAttributes

현재 노드에 특성이 있는지 여부를 나타내는 값을 가져온다.

HasValue

현재 노드에 Value가 있는지 여부를 나타내는 값을 가져온다.

IsDefault

현재 노드가 DTD나 스키마에서 정의한 기본 값에서 생성된 값을 가진 특성인지 여부를 나타낸다.

IsEmptyElement

<MyElement/>와 같은 빈 요소인지 여부를 나타낸다.

Item

특성의 값을 가져온다특히 C#에서 Item 속성은 XmlReader에 대한 인덱스를 의미한다.

LocalName

현재 노드의 지역이름을 나타낸다.

Name

현재 노드의 정규화된 이름을 나타낸다.

NamespaceURI

XmlReader가 배치된 노드의 Namespace URI W3C Namespace 사양에 정의된 대로 가져온다.

NameTable

XmlNameTable을 가져온다.

NodeType

현재 노드의 형식을 가져온다.

Prefix

현재 노드와 관련된 Namespace Prefix를 가져온다.

QuoteChar

Attr 노드의 값을 묶는데 사용되는 따옴표 문자를 가져온다.

ReadState

판독기 상태를 가져온다.

Value

현재 노드의 텍스트 값을 가져온다.

XmlLang

Xml:lang 범위를 가져온다.

XmlSpace

Xml:space 범위를 가져온다.


posted by Kanais