hpp - C++을위한 최상의 개방형 XML 파서는 무엇입니까?



pugixml hpp (8)

이 질문에는 이미 답변이 있습니다.

내 C ++ 프로젝트에서 사용할 간단하고 깨끗한 올바른 XML 파서를 찾고 있습니다. 나 자신을 써야 하나?


TinyXML 및 Boost.PropertyTree로 구성됩니다. 후자는 모든 공식 요구 사항을 충족 시키지는 않지만 매우 간단합니다.


TinyXML은 간단한 XML 작업에 가장 적합 할 수 있지만 더 많은 기능이 필요한 경우 Xerces를 Apache 프로젝트에서 사용해보십시오. 다음 페이지로 이동하여 기능에 대해 자세히 읽어보십시오.

http://xerces.apache.org/xerces-c/


나는 C ++ 초보자 pugixml 페이지에 몇 가지 다른 제안을 시도한 후에 나는 pugixml 이 가장 pugixml 합니다. 그것은 내가 찾고있는 모든 문서와 높은 수준의 API를 쉽게 이해할 수 있습니다.


나는 Gnome xml 파서를 좋아한다. 오픈 소스 (상용 제품에서 사용할 수 있도록 MIT 라이센스)이며, DOM 및 SAX 기반 인터페이스를 갖추고 있습니다.

http://xmlsoft.org/


효율성 / 메모리 관리 (작은 블록을 많이 할당하는 경향이 있음)가 염려되는 경우 TinyXML을 사용하지 마십시오. 내 개인적으로 좋아하는 RapidXML 입니다.


TiCPP 는 TinyXML의 "c ++ 버전"입니다.

'TiCPP'는 공식 이름 TinyXML ++의 약어입니다. 그것은 C ++의 장점을 많이 사용하는 TinyXML ( http://www.grinninglizard.com/tinyxml/ )에 완전히 새로운 인터페이스입니다. 템플릿, 예외 및 훨씬 나은 오류 처리. 그것은 또한 doxygen에 완벽하게 문서화되어 있습니다. 이 버전은 이전과 완전히 똑같은 방식으로 인터페이스를 만들거나 새로운 'ticpp'클래스를 사용할 수 있기 때문에 정말 멋지다. TIXML_USE_TICPP를 정의하기 만하면됩니다. VC 6.0, VC 7.0, VC 7.1, VC 8.0, MinGW gcc 3.4.5 및 Linux GNU gcc 3+에서 테스트되었습니다.


gSOAP 어떻습니까? 공개 소스이며 GPL 라이센스에 따라 무료로 사용할 수 있습니다. 그 이름에도 불구하고 gSOAP 툴킷은 일반적인 XML 데이터 바인딩 도구이며 C 및 C ++ 데이터를 자동으로 XML에 바인딩 할 수 있습니다. XML 구문 분석기 API를 사용할 필요가 없으며 XML 형식으로 데이터를 읽고 쓸 수 있습니다. 매우 간단한 C ++ XML 파서가 정말로 필요한 경우 gSOAP가 과도 할 수 있습니다. 그러나 gSOAP가 2001 년에 도입 된 이래로 많은 산업 분야의 애플리케이션에 대한 평가가 잘 나타나기 때문에 다른 모든면에서 효과가있었습니다.

다음은 간단한 기능 목록입니다.

  • 휴대용 : Windows, Linux, Mac OS X, Unix, VxWorks, Symbian, Palm OS, WinCE 등
  • 작은 설치 공간 : XML 웹 서비스 클라이언트 응용 프로그램 (메모리 사용을 제한하는 DOM 없음)을 구현하기 위해 73KB 코드와 2KB 미만의 데이터.
  • 빠름 : 다른 도구가 주장하는 것을 믿지 마십시오. 실제 속도는 I / O로 측정해야합니다. gSOAP의 경우 TCP / IP를 통한 3000 개 이상의 왕복 XML 메시지가 사용됩니다. XML 구문 분석 오버 헤드는 직렬화가 발생하는 동안 입력 / 출력의 단순 선형 스캔이므로 무시할 수 있습니다.
  • XML 지원 : XML 스키마 (XSD) 가져 오기 / 내보내기, WSDL 가져 오기 / 내보내기, XML 네임 스페이스, XML 정규화, 첨부 파일이있는 XML (MIME), DOM의 선택적 사용, 들여 쓰기가있는 XML을 만드는 많은 옵션, UTF8 문자열 사용 등
  • XML 유효성 검사 : 부분 및 전체 (옵션)
  • WS 지원 : WS-Security, WS-ReliableMessaging, WS-Addressing, WS-Policy, WS-SecurityPolicy 및 기타
  • 디버깅 : 누출 감지, 로깅을 통한 통합 메모리 관리
  • API : 배울 API가없고 "비누"엔진 컨텍스트 초기화 만 수행 한 다음 데이터 읽기 및 쓰기 인터페이스와 "비누"엔진 컨텍스트 파괴를 사용하십시오.

예 :

class Address
{ 
  std::string name;
  std::vector<LONG64> number;
  time_t date;
};

그런 다음 위의 Address 클래스 선언에서 "soapcpp2"를 실행하여 soap_read_Addresssoap_write_Address XML 판독기 및 작성기를 생성합니다. 예를 들면 다음과 같습니다.

Address *a = new Address();
a = ...;
soap ctx = soap_new();
soap_write_Address(ctx, a);
soap_end(ctx);
soap_free(ctx);`

이것은 Address a 객체의 XML 표현을 생성합니다. 헤더 파일 선언에 XML 네임 스페이스 세부 정보 (여기에 표시되지 않음)를 주석으로 추가하여 도구는 스키마도 생성합니다. 이것은 간단한 예입니다. gSOAP 도구는 포인터 기반의 연결 구조 및 심지어 단순한 트리가 아닌 (순환) 그래프를 포함하여 C 및 C ++ 데이터 유형을 매우 광범위하게 처리 할 수 ​​있습니다.

희망이 도움이됩니다.






open-source