작성날짜 : 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 범위를 가져온다. |
'Programming > .NET' 카테고리의 다른 글
[ADO.NET] XmlReader - BaseURI 속성 (0) | 2015.09.22 |
---|---|
[ADO.NET] XmlReader - AttributeCount 속성 (0) | 2015.06.05 |
[.NET] Delegate 실습, 크로스 스레드 해결방법 (0) | 2015.05.28 |
[.NET] Assembly - 2 (0) | 2015.05.19 |
[.NET] Delegate (대리자) - 2 (0) | 2015.05.19 |