2013-05-21 1 views
0

이 상황에서 특정 디자인 패턴 (C++을 타겟으로했을 수도 있음)이 있는지 궁금합니다. C++ 클래스 설명에 대한 XML 클래스 설명 : 디자인 패턴?

<STH_XML> 
<tag1> 
    <tag2 id="myId1"> 
     <tag3 name="type" value="myVal1"/> 
     <tag4 name="device" value="myVal2"/> 
     <tag5 name="instances" value="myVal3"/> 
     <tag6> 
      <tag7 id="myId2"> 
       <specs name="type" value="myVal4"/> 
       <specs name="frequency" value="myVal5" unit="MHz"/> 
      </tag7> 
     </tag6> 
    </tag2> 
</tag1> 
불행하게도,이 XML의 XSD/DTD는 자주 변경이 적용됩니다

나는이 형식으로 데이터가 포함 된 XML 파일이 있습니다.

내가 자동으로이 같은 C++ 구조 또는 일련의 클래스로 XSD/DTD를 변환 할 필요가

:

가장이 기능을 실현하기 위해 적합 어떤 디자인 패턴
struct tag7 
{ 
    std::string id; 
    std::string type; 
    std::string frequency; 
} 

struct tag6 
{ 
    std::set<tag7*> tag6s; 
} 

struct tag2 
{ 
    std::string id; 
    std::string type; 
    std::string device; 
    std::string instances; 
    tag6 elem6; // because I know there is only one from the XSD analysis 
} 

struct tag1 
{ 
    std::set<tag2> tag2s; 
} 

?

답변

1

정말 필요한 디자인 패턴이 아닌 것은 확실합니다.

그래도 프로그래밍 패러다임을 추천 할 수 있습니다. 코드 생성.

XSD/XDD에서 구조를 정의하고 필요한 C++ struct을 자동으로 생성 할 수 있습니다.

한 단계 더 나아가 언어에 구속받지 않는 형식으로 항목을 정의한 다음 해당 항목에서 XSD와 C++를 모두 생성 할 수 있습니다. 그런 다음 나중에 C#으로 이동해야한다면 코드 생성기를 작성할 수 있습니다.

코드 생성기는 파일을 읽고 구문 분석 한 다음 구문 분석 된 데이터에서 일련의 인쇄 문을 통해 코드를 "생성"합니다.

이 프로세스는 빌드 전 단계로 빌드의 일부로 만들 수 있습니다. 생성기는 XSD를 처리하여 C++을 빠져 나간 다음 나머지는 C++을 사용하여 프로젝트를 완성합니다.

나는 당신이해야 할 일을 이미 알고 있다고 생각하지만, code generation은 그 용어입니다.

+0

통찰력을 공유해 주셔서 감사합니다. 이 경우 XML/XSD를 사용하여 특정 도구를 이미 알고 있습니까? – ripkars

+1

내가 마지막으로 이런 식으로 해본 적이있는 것은 Jeeves라는 Perl 스크립트입니다. 그것은 출력을 정확히 내가 원하는 방식으로 정확하게 지정하도록 해줍니다. 그것이 지금까지 해낸 유일한 방법입니다. 그러나 XSD를 구문 분석하는 데 사용할 수있는 XML 파서가 많이 있습니다. 거기에서 C++을 생성하기를 원한다는 것을 알고 있습니다. 그러면 XSD를 반복하고 C++을'cout'합니다. 거대한 라이브러리를 사용자 정의하는 것보다 빨리 가고 싶은 곳으로 아마 갈 것으로 생각됩니다. – John

관련 문제