케이피's 불량블로그!

블로그 이미지

케이피

OOP, Debugging... 인생의 숙제들..... [블로그의 글을 맹신하면 곤란]

Xerces C++ 사용하기 - XML Parser - SAX2 Model ┃ SAX,SAX2

잡다한 정보들(기타정보) 2008. 5. 20. 01:07
Xerces C++ 사용하기 - XML Parser - SAX2 Model ┃ SAX,SAX2 
2007/03/12 19:33

http://blog.naver.com/ussg/150015463466
 
1. xerces 파서

Apache 재단에서 개발/관리하는 오픈 소스 XML 파서로서, 현재 가장 널리 사용되는 XML Parser중 하나이다. (실제로 XML을 사용하는 거의 대부분의 오픈 소스 애플리케이션은 Xerces 파서를 사용한다). 원래 IBM에서 내부적으로 개발한 xml4c라는 파서였는데, IBM이 이를 Apache 재단에 기증한 후 Apache 재단에서 이름을 Xerces로 바꾸어 개발해오고 있다. C++ 버전인 xerces-c++와 Java 버전인 xerces-J가 있다. (xerces-c라는 이름도 쓰이는데, 이것은 xerces-c++와 같다. 처음부터 C++ 버전으로 개발되었다고 한다.)

이 문서에서는 Windows에서 MS VC 7.1 상에서 Xerces-C++를 사용하는 방법에 대해 설명한다.

2. 다운로드 및 설치

다운로드 하기

소스 코드 및 바이너리는 http://xml.apache.org/xerces-c/ 에서 다운로드 받을 수 있다.

각 OS 별로 다양한 버전이 존재하는데, 여기서는 Windows에서 MS Visual Studio를 사용하는 버전을 사용한다. 해당 사이트의 "download" 메뉴를 클릭하면 다운로드 사이트가 나타난다. 사용법, 설치법, 컴파일 방법에 대한 설명도 해당 사이트에서 제공한다. (이 문서도 위 사이트의 정보에 기반하고 있다.)

여기서는 Windows/MSVC용 소스코드(zip)를 다운로드하여 실험하였다. 다운로드 한 후, 원하는 디렉토리에 압축을 풀면 일단 준비 완료이다.

3. 컴파일 하기.

xerces-c++ 소스 코드를 다운로드 받았기 때문에, 해당 XML 파서를 사용하려면 컴파일을 수행해 주어야 한다. 다운로드 받은 소스 코드에는 Xerces Parser Library 뿐만 아니라 XML Parser를 시험하기 위한 다양한 테스트 코드들이 같이 들어있다.

일단 xerces-c++ 소스 코드를 MS VC 7.1에서 컴파일하기 위해서는 다음과 같이 하면 된다.

1. /xerces-c-src-2.7.0/Project/Win32/VC7.1/xerces-all/에서 xerces-all.sln 파일을 선택하여 솔루션을 오픈한다. (Visual Studio에서 솔루션 열기를 통해 위 파일을 선택하면 된다.)

2. 솔루션이 열리면 수많은 프로젝트들이 솔루션 안에 포함되어 있는 것을 볼 수 있을 것이다.
이 중 XercesLib 프로젝트 가 실제 XML Parser를 구현하고 있다.

3. XercesLib 프로젝트를 선택하고 프로젝트를 빌드한다. (오른쪽 클릭한후 "빌드"를 선택해도 되고, 메인 메뉴의 "빌드" 메뉴에서 "XercesLib 빌드"를 선택해도 된다.)
Xerces 라이브러리가 컴파일되면 Xerces Parser API를 사용할 준비가 끝난 것이다.
빌드가 끝나면 /xerces-c-src_2_7_0/Build/Win32/VC7.1/Debug에 xerces DLL이 생성된다.

4. 응용 프로그램에서 Xerces XML Parser 사용하기.
개발자가 작성하는 응용 프로그램에서 Xerces를 사용하는 방법은 두 가지가 있다.
하나는 링크 경로에 라이브러리만 추가하여 사용하는 방법이고, 다른 하나는 XercesLib 프로젝트를 작성하는 응용 프로그램의 솔루션에 포함시켜 사용하는 방법이다. 여기서는 첫번째 방법을 이용하는 방법을 설명한다.

4.1. Include 경로 지정하기
개발자가 작성하는 응용 프로그램이 Xerces를 사용하기 위해서는 Xerces에 관련되 header 파일들이 들어있는 디렉토리로 Include 경로를 지정해 주어야 한다. 응용 프로그램 프로젝트의 속성 편집 화면에서 "C/C++ -> 일반" 메뉴를 선택한 후, "추가 포함 디렉토리"에 /xerces-c-src_2_7_0/src/ 를 추가한다.

4.2. Include 경로 체크하기
#include  "xercesc/sax/HandlerBase.hpp"만 내용으로 하는 한줄짜리 C++ 파일을 작성하여
컴파일 해 본다. 제대로 컴파일 되면, Include 경로가 제대로 설정된 것이다.

4.3. 앞서 컴파일한 xerces 라이브러리를 개발자의 프로젝트 디렉토리로 복사해온다. (나는 xerces-2.7D.dll, xerces-c_2D.lib, xerces-c_2D export library file을 카피해서 사용했다)
그리고 프로젝트 환경에서 해당 라이브러리가 같이 링크되도록 설정한다. 테스트를 위해서 Xerces Package에서 제공되는 Sample 프로젝트 중 하나를 개발자의 솔루션에 추가하여 컴파일 시험을 해볼 수 있다.
위의 과정이 성공적으로 끝났다면 이제 Xerces Parser를 사용할 준비가 끝난 것이다.

5. SAX 2 Model을 이용하는 간단한 예제 프로그램
SAX 2 모델은 Simple API for XML의 약자이다. SAX 모델은 XML 문서를 순차적으로 읽으면서, element (혹은 tag)들이 새로 시작하거나 끝날 때 마다 지정된 Handler를 호출하여 파싱을 수행한다. Sequential Access를 수행함로 XML 문서를 메모리에 저장할 필요가 없기 때문에 적은 메모리로도 Parsing이 가능하다는 것이 장점이다. 반면, XML 문서에 대한 Random Access가 불가능하고, Parsing은 할 수 있으나 Synthesis 방법은 지원하지 않는다는 것이 단점이다. (나중에 설명한 DOM 모델은 SAX와 대비되는 것으로 XML 문서를 메모리에 읽어들여 작업을 수행한다. XML 문서에 대한 Random Access가 가능하고, Parsing과 Synthesis를 모두 지원한다.)
Handler Class의 기본 모델은 <xercesc/sax2/DefaultHandler.hpp>에 정의되어 있다. 개발자는 DefaultHandler Class를 상속하여 startDocument(), endDocument(), startElement(), endElement() 등의 함수들을 재정의함으로써 자신이 원하는 기능을 수행한다.
중요한 Handler 함수들을 아래에 설명하였다.

startDocument() : XML 문서를 파싱하기 직전에 수행된다.

endDocument() : XML 문서를 파싱한 직후에 수행된다.

startElement() : tag의 시작이 인식될 때마다 수행된다. 여기에 tag의 내용에 따라 수행될 작업들을 프로그램한다. 예를 들면 <news>가 인식되는 경우 호출됨.

endElement() : tag의 끝이 인식될 때마다 수행된다. 여기에 tag의 내용이 끝났을 때 수행 될 작업들을 프로그램한다. 예를 들면 </news>가 인식되는 경우 호출된다.

다음의 5개 리스트는 Xerces SAX2 모델을 이용하여 XML 문서의 tag들을 화면에 표시하는 예제 파일들이다.

SAX2PrintHandler.hpp/cpp는 Handler 함수를 구현한 것이고,

SAX2Print.hpp/cpp는 Handler함수를 수행하여 test_data.xml 파일을 파싱하는 부분을 구현한 것이다. Microsoft Visual Studio .NET 7.1 버전에서 컴파일하여 수행되는 것을 확인하였다.

Posted by 케이피
블로그 이미지

OOP, Debugging... 인생의 숙제들..... [블로그의 글을 맹신하면 곤란]

by 케이피

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • 더 보기

태그

  • 최적화?
  • c#
  • DLL
  • SmartClient
  • XML
  • trace
  • 안드로이드
  • vs2008
  • OOP
  • Emma Stone
  • dbgView
  • activex
  • debugging
  • 객체지향
  • 엠마스톤
  • CView
  • CString
  • MFC
  • MFC Tip
  • JAVA 맛보기
  • Automation
  • excel
  • CNN
  • bug
  • 최강 볼걸
  • 유로2008 일정
  • LPCSTR
  • Mentor
  • IME
  • 8강전

글 보관함

«   2025/06   »
일 월 화 수 목 금 토
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

링크

카테고리

전체보기 (98)
Qt의 오묘함 (1)
영양가없는이야기(개인사) (1)
주체못할파괴본능(디버그) (5)
넌왜C++을C처럼쓰냐?(OOP) (2)
잡다한 정보들(기타정보) (53)
귀찮아...(유용링크) (13)
참 잼난다(취미) (6)
JAVA 의 향기~(자바) (2)
코딩을부탁해(Rapid Coding) (0)
베스트똘추짓(개고생리스트) (11)
매운핫소스(허접소스) (1)

카운터

Total
Today
Yesterday
방명록 : 관리자 : 글쓰기
케이피's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

케이피's 불량블로그!

OOP, Debugging... 인생의 숙제들..... [블로그의 글을 맹신하면 곤란]

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 전체보기 (98)
    • Qt의 오묘함 (1)
    • 영양가없는이야기(개인사) (1)
    • 주체못할파괴본능(디버그) (5)
    • 넌왜C++을C처럼쓰냐?(OOP) (2)
    • 잡다한 정보들(기타정보) (53)
    • 귀찮아...(유용링크) (13)
    • 참 잼난다(취미) (6)
    • JAVA 의 향기~(자바) (2)
    • 코딩을부탁해(Rapid Coding) (0)
    • 베스트똘추짓(개고생리스트) (11)
    • 매운핫소스(허접소스) (1)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바