5

XML 형식으로 손쉽게 편집 할 수 있도록 설정을 저장하고 소켓 및 HTTP를 통해 XML 메시지를 통해 기존 응용 프로그램과 통신하는 linux C++ 응용 프로그램을 작성해야합니다. 문제는 내가 지능형 라이브러리를 찾지 못해서 DOM이나 SAX 코드를 작성하고 아주 단순한 메시지를 쓰는 느낌이 들지 않는다는 것이다.C++ Serialization Clean XML XSTREAM과 유사

부스트 직렬화는 거의 일치했지만 생성하는 xml에 많은 부스트 ​​관련 데이터를 추가합니다. 이것은 분명히 교환 형식으로는 잘 작동하지 않습니다. Boost Serialization 또는 다른 C++ 직렬화 라이브러리가 깨끗한 XML을 생성 할 수 있는지 궁금합니다. 버전 속성과 같은 몇 가지 추가 속성이 필요한지는 신경 쓰지 않지만 이름 지정을 제어하고 사용하지 않는 '기능'을 제거 할 수 있기를 정말로 바랍니다. - tracking_level 및 class_id for 예.

이상적으로 저는 Java에서 xstream과 비슷한 것을 가지고 싶습니다. 나는 C++에 내성이 부족하고 수동 코딩이 필요하다는 것을 알고 있습니다. 그러나 kludges없이 간단한 XML을 읽고 쓰는 깨끗한 솔루션이 있다면 좋을 것입니다!

이 작업을 수행 할 수없는 경우 XML 스키마가 표준 자원 (계약 우선) 인 도구에도 관심이 있습니다. 이는 C++의 JAXB 대안입니다. 지금까지는 CodeSynthesis XSD와 같은 상용 솔루션만을 발견했습니다. 오픈 소스 솔루션을 선호합니다. 나는 gSoap을 시도했다 - 그러나 그것은 정말로 추악한 코드를 생성하고 또한 SOAP 특정 적이다.

필자도 필자는 protobuffers에 대한 대체 직렬화 형식을 살펴보기 시작했습니다. 이것은 존재합니다 -하지만 자바에 대해서만! 프로토콜 버퍼가 XML보다 더 잘 지원되는 데이터 교환 형식 인 것 같습니다.

나는이 응용 프로그램에 대한 libs를 찾는 것만으로 화제가되고 새로운 아이디어가 필요합니다. 누군가?

답변

0

정확히 무엇을 제공하고 있는지, 그래서 당신이 찾고있는 것이지만 Qt가 xml 모듈을 가지고 있는지 확실하지 않습니다. 또한 네트워크 모듈은 마치 당신에게 유용 할 수있는 것처럼 들립니다.

0

Troubadour의 답변을 더욱 확장하려면 Qt's XML libraries을 사용하여 현재의 상황에 매우 근접한 일을 성공적으로 수행했습니다. 내 자신의 경우에는 구성 데이터를 로컬 파일로 직렬화 한 다음 가끔씩 다른 스레드로 스트리밍합니다.

QXmlStreamWriterQXmlStreamReader은 문제의 두 클래스입니다. Here이 예제를 사용하고 있습니다.

내 XML 직렬화의 경우 실제 형식을 완벽하게 제어 할 수 있으며 달성하는 데는 수 백 줄의 코드 만 필요했습니다. Qt의 XML 사용에 관해 가장 좋은 점은 콘텐츠에 중점을 두어 라이브러리가 데이터를 마크 업하는 고통스러운 작업을 수행 할 수 있다는 것입니다. 이는 이상적입니다.

마지막으로 here은 Qt 라이센스 (상업용, GPL, LGPL)에 대한 정보입니다.

0

질문에서 인용 : "지금까지 나는 단지 CodeSynthesis XSD와 같은 상용 솔루션을 발견 한 나는 오픈 소스 솔루션을 선호하는 것"이라고 말했다. CodeSynthesis XSD이 오픈 소스 프로젝트에서 사용할 수있는

.이 제품 는 상업 독점 라이센스을 가지고 있지만 또한 오픈 소스 라이센스 가지고뿐만 아니라 ( 추가 자유 GPL 버전 2 만에 주어진). 당신은 CodeSynthesis XSD에 대한 세 번째 라이센스 옵션은 무료 독점 입니다 http://www.gnu.org/licenses/license-list.html

에 나열된 모든 "GPL 호환 자유 소프트웨어 라이센스"모든 "GPL - 호환되지 않는 무료 소프트웨어 라이센스"와 함께 사용하도록 허용 작은 어휘의 라이센스. 작은 XML 스키마를 사용하는 경우 무료 라이센스 을 사용하십시오.

여기에 다른 CodeSynthesis XSD 라이센스에 대한 자세한 내용을 읽어 http://www.codesynthesis.com/products/xsd/license.xhtml

을 또한 생성 된 바이너리 형식의 및 분석을 직렬화 지원 기능 CodeSynthesis XSD의 측면에서. 효율적인 통신을 위해서는 형식을 사용할 수 있습니다.