Programming

XML Serialize

콜러스 XXII 2008. 8. 7. 11:03

간혹 C++로 프로그램 만들다 보면 C#의 XML Serialize가 아주 그리워 질때가 있다.
인터넷에는 많은 방법들이 있었는데 나는 Xerces(XML 종합 라이브러리)와 XSD serializer
(Serialize를 위한 XSD Compiler)를 이용해서 Serialize를 한다.

이 조함으로는 Class 베이스의 소스가 나온다. Struct 베이스의 소스 출력이 아니다.

[다음의 Step은 Window 환경하에서 VS2008을 이용한 방법이다. 또한 개인적으로
Install 버젼은 선호하지 않으므로 소스를 받아 사용했다.]

1. 최종 버젼을 얻는다.
 
     Xerces : http://xerces.apache.org/xerces-c/download.cgi
                  (소스를 받도록 한다. 2008/08/07 기준으로 버젼은 2.8.0이다.)
             
     XSD Serializer : http://www.codesynthesis.com/products/
                            (xsd-3.1.0-i686-windows.zip을 받도록 한다.)
                     
2. 적당한 폴더에 각각을 위치 시킨다.                     
 
     예) C:\Project
    
     라고 가정한다.

3. Xerces를 Compile한다.
 
     C:\Project\xerces-c-src_2_8_0\Projects\Win32\VC8\xerces-all
    
     에 보면 Solution화일이 있는데 그것을 Load 해서 Compile 한다.
     그러면 최종 DLL과 LIB는
    
     C:\Project\xerces-c-src_2_8_0\Build\Win32\VC8\Debug
    
     에 생긴다. (Debug Compile기준.)
    
4. VS2008을 연다.
 
     Tools -> Option
    
     을 선택한다.
 
5. Projects and Solution -> VC++ Directories
 
     를 선택한다.
    
6. Show Directories for 에서 Include files를 선택한다.
 
     C:\Projects\xerces-c-src_2_8_0\src
     C:\Projects\xsd-3.1.0-i686-windows\libxsd
    
     를 맨위에 추가 한다.
    
7. Show Directories for 에서 Library files를 선택한다.
 
     C:\Projects\xerces-c-src_2_8_0\Build\Win32\VC8\Debug   
    
     를 맨위에 추가 한다. (아까 디버그로 Compile했었다. Release 버젼은 또다른
     Folder가 생길 것이다.)
    
8. Show Directories for 에서 Executable files를 선택한다. 
 
     C:\Projects\xsd-3.1.0-i686-windows\bin
     
     를 맨위에 추가 한다.
     
9. C:\Project\xerces-c-src_2_8_0\Build\Win32\VC8\Debug에 있는 DLL을 해당
     Project에 가져다 둔다.
    
10. 준비 끝이다. 예제를 Compile한 뒤 잘되는지 확인 한다.    

11. 환경변수 Path에 C:\Projects\XML\xsd-3.1.0-i686-windows\bin를 추가해 둔다.
 
------------ 실제 사용시 주의 ---------------------
 
* XSD 화일 생성할때마다 다음 단계를 거쳐야 한다.

[DLL 프로젝트 내에서 만들 경우]
     
1. XSD 화일을 하나 만든다.   
 
2. 화일을 오른쪽 클릭하여 Properties를 선택한다.
 
3. Custom Build Step -> General을 선택한다.
 
4. Command Line 항목이 있는데 그기에

      xsd.exe cxx-tree --generate-serialization test.xsd
     
      라고 입력 해야 한다.

[EXE 프로젝트 내에서 만들 경우]

* VS2008에서는 XSD 자체를 DB와 연계되어 이용 하더라... ㅠ.ㅠ 제길~
   (선택하는게 귀찮은데... Rule을 이용해야 한다.)

1. XSD 화일을 하나 만든다.   
 
2. 도스 창을 열어 해당 화일이 있는 Folder로 간뒤

   xsd.exe cxx-tree --generate-serialization
test.xsd

   를 직접 입력하여 실행한다.

3. Project에 생성된 File을 추가한다.


노파심에서 하는 말이지만 생성된 XML은 XSD와 같이 배포 되어야 한다.


XSD Serializer를 이용하기 위한 문서는

http://www.codesynthesis.com/products/xsd/c++/tree

에 있다.
     
     
VS Compiler Rule을 이용하는 방법이 있는데
 
http://wiki.codesynthesis.com/Using_XSD_with_Microsoft_Visual_Studio
 
에 설명 되어 있다.
 

데이타 바인딩에 유용할듯...


[2009/03/22 업데이트] 흨.... C# 3.5가 나오면서 XML-LINQ가 등장해서 더 쉽게 XML을 조작할수 있게 되었다. 넘 편한건 좋은데 랭기지 버젼업좀 그만하면 안될까 MS !!




[이것은 좋은것이다. - 막쿠베]