블로그 이미지
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 31

Notice

05-01 15:57

Recent Post

Recent Comment

Recent Trackback

Archive

2015. 9. 22. 10:00 Programming/.NET

작성날짜 : 2011-04-26


참고 서적 : About ADO.NET


CanResolveEntity 속성

CanResolveEntity 속성은 XmlReader가 엔터티를 구문 분석하고 확인할 수 있는지 여부를 나타내는 값을 보여 준다. 기본 문형은 다음과 같다.

public virtual bool CanresolveEntity

        {

            get;

        }

 

XmlReader 개체가 엔터티를 구문 분석하고 확인할 수 있으면 true이고, 그렇지 않으면 false를 반환한다. CanResolveEntity 속성은 DTD 정보를 지원하지 않는 XmlReader를 구현하는 경우에는 항상 false를 반환하게 된다. CanResolveEntity가 false를 반환하는 경우 즉, XmlReader 개체가 엔터티를 구문분석하고 확인할 수 없는 경우에는 ResolveEntity를 호출하면 오류가 발생하게 된다. 그러므로 CanResolveEntity 속성은 DTD 정보를 지원하는 XmlReader를 구현하는 경우에 주로 사용하게 된다. 먼저 다음과 같이 내부 DTD를 포함하고 있는 XML 문서를 작성한다.

 

 

이 XML 문서는 앞 장에서 설명한 내부 DTD를 포함하고 있다. DTD는 앞 장에서 설명한 것처럼 XML 문서 내부와 외부 파일 형태로 선언될 수 있고 XML 문서의 구조에 대해 설명하고 있다. XML 문서의 구조를 설명하는 방법으로는 DTD와 XML 스키마 등이 있다. 위와 같은 XML 문서가 작성되었다면 다음과 같이 VS.NET을 이용하여 WebForm1.aspx 파일의 Page_Load 이벤트 핸들러를 작성한다.

protected void Page_Load(object sender, EventArgs e)

        {

            XmlValidatingReader xvReader = null;

            XmlTextReader xtReader = null;

            try

            {

                xtReader = new XmlTextReader("C:/xml/Book.xml");

                xtReader.WhitespaceHandling = WhitespaceHandling.None;

                xvReader = new XmlValidatingReader(xtReader);

                xvReader.ValidationType = ValidationType.None;

                xvReader.EntityHandling = EntityHandling.ExpandCharEntities;

                // 루트 엘리먼트로 이동하기

                xvReader.MoveToContent();

                // title 시작 태그로 이동하기

                xvReader.Read();

                // title 엘리먼트 건너뛰기

                xvReader.Skip();

                // price 시작 태그 읽기

                xvReader.ReadStartElement();

                Response.Write("ResolveEnity메서드 실행<br>");

                Response.Write("===================<br>");

                if (xvReader.CanResolveEntity == true)

                {

                    xvReader.ResolveEntity();

                    xvReader.Read();

                    Response.Write("NoteType : " + xvReader.NodeType);

                    Response.Write("  value : " + xvReader.Value);

                    Response.Write("<br>");

                    xvReader.Read();

                    Response.Write("NoteType : " + xvReader.NodeType);

                    Response.Write("  value : " + xvReader.Name);

                }

            }

            finally

            {

                if (xvReader != null)

                {

                    xvReader.Close();

                }

            }

        }

 

CanResolveEntity 속성이 True 값을 가질 때에만 출력이 되도록 처리를 하였다. 위의 코드를 실행하면 다음과 같은 결과를 볼 수 있다.

  

posted by Kanais