언리얼 기본 XML Parser 가 제한 사항이 많아 불편했다.

: attribute 에 "(double quote)를 쓸 수 없다.
: attribute 선언 시에 공백을 쓸 수 없다.
: root element가 value와 child가 없는 element 일 수 없다.


기존에 사용 중인 xml 파일을 그대로 사용하려다 보니 파일마다 고치기 힘들어 다른 XMl Parser 를 가져다 붙였다. 전에는 MS XML Parser 를 썼었는데 언리얼에 붙이기에는 Platform 의존도가 너무 높아지는 것 같아서 TinyXML-2 를 가져다 붙였다.

TinyXML-1 이 메모리 사용이 비효율적이고 모바일 환경에 맞지 않는 것 같아서 TinyXML-2 를 만들었다고 한다.

TinyXML-1 과 TinyXML-2 장단점을 비교한 것도 있다.

Both parsers:

  1. Simple to use with similar APIs.
  2. DOM based parser.
  3. UTF-8 Unicode support. http://en.wikipedia.org/wiki/UTF-8

Advantages of TinyXML-2

  1. The focus of all future dev.
  2. Many fewer memory allocation (1/10th to 1/100th), uses less memory (about 40% of TinyXML-1), and faster (~5x on read).
  3. No STL requirement.
  4. More modern C++, including a proper namespace.
  5. Proper and useful handling of whitespace

Advantages of TinyXML-1

  1. Can report the location of parsing errors.
  2. Support for some C++ STL conventions: streams and strings
  3. Very mature and well debugged code base.

ReleaseDll 정적 라이브러리를 만들어서 언리얼에 붙였다.

붙이고 테스트 해보니 몇 가지 문제점이 있었다.

: utf-8 을 지원한다고는 하지만 LoadFile 은 fopen 을 사용하고 있는 관계로 ANSI 문자열만 지원한다. . 파일명이 다른 국가 문자열을 포함한다면 읽어들일 수 없었다.
: utf-16 을 지원하지 않는다.

그래서 다음과 같은 방식으로 wrap 해서 사용하고 있다.

: 언리얼은 다국어를 지원하는 관계로 FileHelper::LoadFileToString 을 이용하여 다국어 파일명의 파일을 읽어들인다.
: TinyXML2 로 보내기 위해 utf-8 으로 문자열을 변환한다.
: XmlDocument::Parse 를 통해 파싱 후 각 element 의 문자열 데이터를 UTF8_TO_TCHAR 를 이용하여 변환해서 사용한다.

공식 홈페이지 : http://www.grinninglizard.com/tinyxml2/


728x90

+ Recent posts