2012-05-06 11 views
6

をC++のオブジェクトをXML文字列表現に変換する簡単な方法を探していますので、この方法でサーバーと通信できます。例えばC++オブジェクトからXMLへの通信

、私たちは私がオブジェクトを持っているとしましょう:

class A{ 
    string data1; 
    string data2; 
    string dataN; 
    list<B> bList; 
} 

class B{ 
    string moreData; 
} 

私は、次のXML-表現をしたいと思います: (私は1つのインスタンスAを作成し、それがBの2つのインスタンスを持っていると仮定)

<A> 
    <data1>content</data1> 
    <data2>content</data2> 
    <dataN>content</dataN> 
    <B> 
     <moreData>content</moreData> 
    </B>  
    <B> 
     <moreData>content</moreData> 
    </B> 
</A> 
+2

http://stackoverflow.com/questions/234724/how-to-serialize-in-c – m0skit0

+0

あなたの質問は何ですか? – Starkey

+0

@ m0skit0それは素晴らしい図書館です。私は例[boost XML](http://www.boost.org/doc/libs/1_36_0/libs/serialization/example/demo_xml.cpp)を取ったが、私が望むより多くの情報をXMLに出力する(例えばメタデータアイテムに対応するなど)は、私の質問に投稿したような単純な出力を生成する方法がありますか? –

答えて

3

説明する内容は、XMLデータバインディングと呼ばれます。 XSDまたはDTDからC++コードを生成する製品が数多くあり、一覧としてはhttp://www.xmldatabinding.org/、詳細についてはhttp://www.rpbourret.com/xml/XMLDataBinding.htmを参照してください。

このXML Data Binding example for C++もご覧ください。ソーススキーマの例と生成されたコードを示しています。

あなたのスキーマがかなり基本的で、ジェネレータにそれらを調整する能力があるなら、おそらく仕事をするいくつかのオープンソースプロジェクトがあります。 XML標準にバインドしている場合は、ほとんどのジェネレータの制限に迅速に対応します。 Liquid XMLジェネレータは、ほとんどすべてのXSD標準に対応していますが、お支払いいただく必要があります。

2

ポインタをシリアライズする方法がないので、単純に置くので標準的な方法はありません。常にアプリケーション固有のものになります。

ただし、独自のクラスを作成して、必要に応じてシリアライズすることができます。

xmlパーサーに関しては、this oneを試しましたか?非常にシンプルで、効率的で、簡単に学ぶことができます。私は基本的にすべてそれでやった。商用ライセンスを求めることさえできます。

3

C++ではこの問題の普遍的な解決策はありませんが、多くのアドホックな実装が存在します。

この質問はいくつかの顕著なリンクやハウツーを持っていますHow to implement serialization in C++

関連する問題