간단한 xml 파서 구현하기 |
| programming/general 2007/02/05 02:43 |
프로젝트에 xml를 사용하려고 tinyxml을 사용하고 있는 데, 유니코드 관련해서 아쉬운 점이 있어서 주말에 짬을 내서 한번 만들어 봤습니다. (tinyxml이 유니코드를 지원 안 해서 문자열 함수 부분을 전부 유니코드로 수정해서 사용 중입니다.)
목표로 삼은 것은
- 간단하게 구현
- 인터페이스상 유니코드 지원 (tchar 활용해서 unicode과 multibyte 를 모두 지원하도록)
- xml최소한의 구성 요소(계층적인 element, attribute 등)만 구현
- 내부적으로 utf8, unicode, multibyte 읽어들이도록 (unicode 빌드인 경우 Unicode, utf8이 좋고, ansi 인 경우 그냥 ansi 데이터를 써야 변환 함수 없이 사용하고 좋음.)
- 읽기와 저장이 가능
- 탐색 인터페이스가 간단하도록
- '속도나 메모리 사용은 크게 신경 안 쓴다'고 가정 (기존 프로젝트나 현재 프로젝트에서 xml은 툴에서 사용하거나, 구조적인 데이터를 미리 읽어서 세팅 하는 용도로만 사용하고 있고, 그 정도로 한정했음 – 여러 가지 데이터로 사용하기엔 용량이 끔찍하게 커지고, 매번 데이터를 파싱하기엔 부담이 크고, 데이터 형에 맞춰서 변환하거나, 검색에 최적화 하도록 만들기엔 파서의 덩치가 너무 커지기 때문에...)
- 주말을 심심하지 않게... T_T
우선 기본적인 기능들은 구현을 해봤고, 최초로 올려봅니다. 여건이 되면 앞으로 버전을 올려가면서 업데이트할 생각입니다. (간단하게 다른 프로젝트들도 시도해보려고 합니다.)
구현한 것을 간단히 짚어보면
- 텍스트 파일은 utf8, 유니코드 등에 맞춰서 알아서 읽기 (파일 앞에 의사코드가 규칙은 아니지만 메모장을 포함한 윈도우용 어플리케이션에서 사용되고 있음)
- 파싱해서 계층적인 구조로 가지고 있기
- 각 엘레먼트를 node로 구성하고 속성(item)과 값을 포함하는 데이터 구조로 표현하기
- 엘레먼트를 추가, 삭제, 수정하도록 인터페이스 구성/구현
- 파일로 저장하기
slimxml_070213.zip
댓글을 달아 주세요
용도에 맞는 간소화된 파서도 좋겠으나 개인적으로 libxml2을 추천합니다. 유니코드 지원은 물론 XSD/RelaxNG Schema Validation, XPath, XSLT, HTTP, Zip을 지원하며, 필요한 기능만 조합하여 빌드가 가능합니다. 스태틱 Library여서 MSXML처럼 DLL설치문제가 없는 점도 장점입니다..
libxml2란걸 몰랐습니다. 한번 검토해봐야 겠네요. 감사합니다. ^^
좋은 자료 갑사합니다 ^^
제가 잘 몰라서 그런데 사용법은 어떻게 되나요??
컴파일 방법이라든지. Linux에서 사용할 수 있는지도 가르쳐주시면
감사하겠습니다
아마 tchar.h 아니면 차이는 없지 않을 까 싶은데요.
한번 빌드해보고 업데이트할때 적용해보겠습니다.
보는 분은 없지만, 이 달중에 한 업데이트 하려고 하고 있습니다. ㅎㅎ
많은 감사 우수한 위치! 나는 너의 웹사이트를 사랑한다!
친구는 위치의 너의 현재 팬이 되었다!
블로그를 위한 감사합니다.
관심을 끌. 너가 좋을 동일할 지점을.
유용한 정보. 좋은 디자인.
우수한 디자인!!
정말 같지 않는 블로그!
너는 위치를차가운 만들었다!
나는 배웠다 매우…
그런 위치를 경이롭 위해 많게의 감사!
걸출한 위치! 많은 감사.
관심을 끌. 너가 좋을 동일할 지점을.