programing

C++에 가장 적합한 오픈 XML 파서는 무엇입니까?

bestprogram 2023. 10. 29. 19:54

C++에 가장 적합한 오픈 XML 파서는 무엇입니까?

C++ 프로젝트에서 사용할 간단하고, 깨끗하고, 정확한 XML 파서를 찾고 있습니다.제가 직접 써볼까요?

RapidXML은 어떻습니까? RapidXML은 C++로 작성된 매우 빠르고 작은 XML DOM 파서입니다.이것은 주로 내장된 환경, 컴퓨터 게임, 또는 사용 가능한 메모리 또는 CPU 처리 능력이 값비싼 기타 응용 프로그램을 목표로 합니다.RapidXML은 Boost Software License에 따라 라이센스가 부여되며 소스 코드는 자유롭게 사용할 수 있습니다.

특징들

  • 동일한 데이터에서 실행되는 strlen 함수의 parsing 속도(DOM tree building 포함)에 접근하는 parsing 속도.
  • 최신 CPU(2008년 기준)에서 파서 처리량은 초당 약 10억 문자입니다.온라인 설명서의 성능 섹션을 참조합니다.
  • 코드의 작은 메모리 풋프린트와 DOM 트리를 만들었습니다.
  • 헤더 전용 구현으로 통합 프로세스를 간소화합니다.
  • 어떠한 의무 없이 상업적 목적과 비상업적 목적을 불문하고 거의 모든 용도로 사용할 수 있는 간단한 라이센스.
  • UTF-8 및 부분적으로 UTF-16, UTF-32 인코딩을 지원합니다.
  • C++ Standard Library의 매우 작은 하위 집합을 제외한 종속성이 없는 휴대용 소스 코드.
  • 이 하위 집합은 너무 작아서 표준 라이브러리를 사용하지 않을 경우 수동으로 쉽게 에뮬레이트할 수 있습니다.

한계

  • 파서는 DOCTYPE 선언을 무시합니다.
  • XML 네임스페이스는 지원되지 않습니다.
  • 파서에서 문자 유효성을 검사하지 않습니다.
  • 파서의 인터페이스가 DOM 규격에 맞지 않습니다.
  • 파서에서 특성 고유성을 검사하지 않습니다.

출처 : wikipedia.org ://Rapidxml


사용하는 용도에 따라 XML Data Binding을 사용할 수도 있습니다.코드합성 XSD는 CodeSynthesis가 개발하고 GNU GPL 및 독점 라이선스 하에 이중 라이선스된 C++용 XML 데이터 바인딩 컴파일러입니다.XML 인스턴스 규격(XML Schema)이 주어지면 주어진 어휘와 구문 분석 및 직렬화 코드를 나타내는 C++ 클래스를 생성합니다.

CodeSynthesis XSD의 독특한 기능 중 하나는 인메모리 C++/Tree와 스트림 지향 C++/Parser의 두 가지 다른 XML Schema to C++ 매핑을 지원한다는 것입니다.C++/Tree 매핑은 트리와 같은 인메모리 데이터 구조를 가진 전통적인 매핑입니다.C++/Parser는 XML 인스턴스 문서에 저장된 정보를 어휘별 구문 분석 이벤트의 계층 구조로 나타내는 SAX와 같은 새로운 매핑입니다.C++/Tree에 비해 C++/Parser 매핑을 사용하면 메모리에 맞지 않는 대형 XML 문서를 처리하거나 스트림 중심의 처리를 수행하거나 기존의 인메모리 표현을 사용할 수 있습니다.

출처 : wikipedia.org ://코드합성 XSD

pugixml - C++용 경량, 단순하고 빠른 XML 파서 매우 작음(RapidXML과 비교), 매우 빠름(RapidXML과 비교), 매우 사용하기 쉽습니다(RapidXML보다 우수함).

TinyXML을 사용해 봅니다.

http://sourceforge.net/projects/tinyxml

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

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

이것을 시도해 보세요: http://www.applied-mathematics.net/tools/xmlParser.html
RapidXML이나 PUGXML보다 쉽고 빠릅니다.
TinyXML은 "simple parser" 중 최악입니다.

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

gSOAP는 어떻습니까?오픈 소스이며 GPL 라이선스 하에서 자유롭게 이용할 수 있습니다.gSOAP 툴킷은 일반적인 XML 데이터 바인딩 도구이며 C 및 C++ 데이터를 XML에 자동으로 바인딩할 수 있습니다.XML 파서 API를 사용할 필요는 없습니다. 데이터를 XML 형식으로 읽고 쓸 수 있게 해주십시오.정말로 간단한 C++ XML 파서가 필요하다면 gSOAP는 오버킬일 수 있습니다.그러나 gSOAP가 2001년에 도입된 이후로 다른 모든 분야에서 유용하게 사용되었습니다.

기능 목록은 다음과 같습니다.

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

예를 들어,

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

그런 다음 "soapcpp2"를 실행합니다.Address위의 클래스 선언을 생성합니다.soap_read_Address그리고.soap_write_AddressXML 판독기 및 기록기(예:

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

이것은 의 XML 표현을 생성합니다.Address a물건.XML 네임스페이스 세부 정보(여기에 표시되지 않음)로 헤더 파일 선언에 주석을 달면 도구는 스키마도 생성합니다.이것은 간단한 예입니다.gSOAP 툴은 포인터 기반의 링크 구조와 (트리만이 아닌) 짝수(순환형) 그래프 등 매우 광범위한 C 및 C++ 데이터 유형을 처리할 수 있습니다.

도움이 되길 바랍니다.

TinyXML은 단순 XML 작업에 가장 적합할 수 있지만 더 많은 기능이 필요한 경우 apache 프로젝트의 Xerces를 사용해 보십시오.해당 기능에 대한 자세한 내용은 다음 페이지로 이동합니다.

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

TinyXML, 그리고 Boost.속성 트리.후자는 모든 공식적인 요구사항을 충족하지는 않지만 매우 간단합니다.

저는 C++ 신입이고 이 페이지에서 몇 가지 다른 제안을 시도해 본 결과 pugixml을 가장 좋아한다고 말해야 합니다.문서를 쉽게 이해할 수 있고, API 수준이 높아 제가 찾던 것입니다.

나는 Gnome xml 파서를 좋아합니다.오픈 소스(MIT License, 상용 제품에 사용 가능)로 빠르고 DOM과 SAX 기반의 인터페이스를 갖추고 있습니다.

http://xmlsoft.org/

TinyXML 또는 IrrXML 시도...둘 다 경량 XML 파서입니다(어쨌든 TinyXML을 사용하는 것을 추천합니다).

언급URL : https://stackoverflow.com/questions/170686/what-is-the-best-open-xml-parser-for-c