오랫만에 포스팅이네요. 요새 XMLCPP 만드는 재미에 빠져서요. :-)
XMLCPP 0.91 버전을 release했습니다. 0.9버전의 코드와 디렉토리들을 좀 정리한 내용도 있지만 가장 큰 변화는 Serializer 클래스가 구현되었다는 점입니다. PullParser가 XML을 읽기 위한 인터페이스라면 Serializer는 XML을 쓰기 위한 인터페이스입니다.
간단한 예로 다음 XML 파일을 만들어 보기로 하죠.
먼저 Serializer instance를 생성하고 원하는 feature를 activate한 후 output target을 지정합니다. 여기서는 "filename.xml"이라는 파일에 쓰기로 하겠습니다.
만약 LINE_SEPARATOR feature를 사용하지 않는다면 XML 전체 출력이 한줄로 됩니다. 물론 ignorable_whitespace() 함수를 사용하여 직접 줄바꿈이나 들여쓰기를 할 수도 있습니다.
Serializer instance가 준비되었으므로 이제 쓰면 됩니다. ;-) start_tag(), end_tag() 함수의 첫번째 인자는 namespace를 나타내는데 이 예제에서는 사용하지 않으므로 모두 null string을 사용하였습니다.
마지막으로 열었던 fstream을 닫아주면 완료입니다.
물론 namespace와 attribute도 지원합니다. 자세한 내용은 Tutorial을 참고하시면 됩니다.
그리고 0.91 release하면서 프로젝트 홈페이지도 새단장했습니다. :-) sf.net에서 제공하는 Web service가 너무 느려서 결국 ideathinking.com에 한 구석을 차지하게 되었네요.
다음 계획은 libconv 없이 사용할 수 있도록 code converter를 구현하는 것입니다. 이 code converter는 UTF-8과 UTF-16만 지원할 예정입니다. libconv가 GNU license라 이 license를 사용할 수 없는 프로젝트에서도 사용할 수 있게 하기 위한 작업입니다.
이 작업이 끝나고 나서 Windows로 포팅할 예정입니다.
XMLCPP 0.91 버전을 release했습니다. 0.9버전의 코드와 디렉토리들을 좀 정리한 내용도 있지만 가장 큰 변화는 Serializer 클래스가 구현되었다는 점입니다. PullParser가 XML을 읽기 위한 인터페이스라면 Serializer는 XML을 쓰기 위한 인터페이스입니다.
간단한 예로 다음 XML 파일을 만들어 보기로 하죠.
XMLCPP Library 0.91
blah blah
먼저 Serializer instance를 생성하고 원하는 feature를 activate한 후 output target을 지정합니다. 여기서는 "filename.xml"이라는 파일에 쓰기로 하겠습니다.
ofstream fs("filename.xml");
Serializer sr;
sr.set_feature(Serializer::LINE_SEPARATOR);
sr.set_feature(Serializer::INDENTATION);
sr.set_output("UTF-8", fs);
만약 LINE_SEPARATOR feature를 사용하지 않는다면 XML 전체 출력이 한줄로 됩니다. 물론 ignorable_whitespace() 함수를 사용하여 직접 줄바꿈이나 들여쓰기를 할 수도 있습니다.
Serializer instance가 준비되었으므로 이제 쓰면 됩니다. ;-) start_tag(), end_tag() 함수의 첫번째 인자는 namespace를 나타내는데 이 예제에서는 사용하지 않으므로 모두 null string을 사용하였습니다.
sr.start_document(L"UTF-8", L"");
sr.start_tag(L"", L"post");
sr.start_tag(L"", L"title");
sr.text(L"XMLCPP Library 0.91");
sr.end_tag(L"", L"title");
sr.start_tag(L"", L"content");
sr.text(L"blah blah");
sr.end_tag(L"", L"content");
sr.end_tag(L"", L"post");
sr.end_document();
마지막으로 열었던 fstream을 닫아주면 완료입니다.
fs.close();
물론 namespace와 attribute도 지원합니다. 자세한 내용은 Tutorial을 참고하시면 됩니다.
그리고 0.91 release하면서 프로젝트 홈페이지도 새단장했습니다. :-) sf.net에서 제공하는 Web service가 너무 느려서 결국 ideathinking.com에 한 구석을 차지하게 되었네요.
다음 계획은 libconv 없이 사용할 수 있도록 code converter를 구현하는 것입니다. 이 code converter는 UTF-8과 UTF-16만 지원할 예정입니다. libconv가 GNU license라 이 license를 사용할 수 없는 프로젝트에서도 사용할 수 있게 하기 위한 작업입니다.
이 작업이 끝나고 나서 Windows로 포팅할 예정입니다.
Comments
Post a Comment