2013-05-21 138 views
0

我想知道這種情況是否有任何特定的設計模式(可能針對C++)。描述C++類的XML類描述:設計模式?

我有這種格式包含數據的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是經常變動。

我需要自動轉換XSD/DTD成一系列的C++結構或類是這樣的:

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

我上次用這種方法做的一個是Perl腳本,叫做Jeeves。它讓我可以從頭開始指定輸出結果。這是迄今爲止我做到的唯一途徑。但是有很多XML解析器可以用來解析你的XSD。從那裏,你知道你想要生成的C++,然後只需遍歷XSD和cout就可以了。我認爲,你可能會想要比想要開箱即可定製一個巨大的圖書館更快。 – John