2014-04-07 1 views
0

아래 XML은 FIX 메시지를 나타냅니다. 이 메시지에는 ID 태그를 사용하여 번호가 매겨진 가변 개수의 필드가 있으며 각각 다른 속성을 포함합니다. 그래서이 XML을 구문 분석하고 추가 코딩 기능을 사용하여 필드 당 모든 속성 정보를 포함하는 C++ 메시지 객체를 출력합니다. BE- 것C++에서 FIX XML 데이터를 구문 분석하여 객체를 만드는 방법은 무엇입니까?

enter image description here

첫 번째 질문은 내가이 작업을 수행하는 데 사용할 수있는 부스트 라이브러리가? 두 번째 질문은 XML 파서가 제공 할 수있는 인터페이스와 객체를 작성하는 코드를 작성해야하는 인터페이스 사이의 인터페이스입니다. 예를 들어, 8 행의 XML에는 <delta/> 태그가 있으며 이것은 객체의 속성입니다. 따라서 필드 52 (8 행)의 경우 속성은 델타 하위 유형 객체가되지만 9 행의 경우 속성은 하위 유형 객체 복사입니다. 필드 ID가 키인 std::unordered_map에 이러한 부속 유형을 저장하고 싶습니다.

다른 말로 표현하면 XML 파서가 내가 원하는 방식으로 객체를 작성하는 데 도움이되는 "최종 결과"는 무엇입니까?

답변

0

일반적으로 많이 사용되는 xml 파서 중 하나 인 Xerces와 TinyXML 중 하나를 사용해야합니다. 더있다. Google은 귀하의 친구입니다.

DOM 모드가 아닌 SAX 모드로 실행하고 싶습니다 (선택한 파서에 대한 설명이 설명되어 있습니다). 즉, 파서는 도메인 별 요구 사항과 일치하지 않는 임의의 구조를 메모리에 작성하는 대신 구문 분석하는 각 요소 및 특성에 대해 사용자가 제공하는 코드를 호출하게됩니다.

+0

방금 ​​Boost.PropertyTree를 발견했습니다.이 점에 대해 어떻게 생각하십니까? http://akrzemi1.wordpress.com/2011/07/13/parsing-xml-with-boost/ – user997112

+0

부스트 속성 트리를 사용했습니다. 나는 XML, JSON, .INI (그리고 아마도 다른 것들)를 지원하려고 시도하고 "최소한의 공통 분모"문제를 겪고 있지만 괜찮습니다. 그러나 ... –

+0

귀하의 경우에는 대체 형식이 필요하지 않으므로 XML을 파싱 할 수있는 패키지보다는 "실제"XML 파서를 사용합니다. 특히 부스트 속성은 DOM과 비슷합니다. SAX처럼 데이터를 앱에 "푸싱"하는 대신 데이터를 가져와야하는 자체 내부 구조로 데이터를 읽습니다. (나에게 "푸시 (push)"접근법은 더 깨끗합니다.) –

관련 문제