2011-11-09 6 views
0

私はいくつかのネイティブC++クラスにXMLとして保存する機能を追加しています。私は、.NETでXmlConvertと同じ仕事をするC++のものを探しています。.NETにネイティブC++バージョンのXMLConvertはありますか?

double d = 45.5454545; 
xmlWriter.WriteAttributeAtring(XmlConvert.ToString(d)); 
+0

私は通常、C++の単純なxmlを扱うときにhttp://www.grinninglizard.com/tinyxml/を使用します。簡単にプロジェクトに追加して簡単に使用できます。 – Lucian

答えて

0

boost XML serilizationを使用することを検討してください。

#include <fstream> 
#include <iostream> 
#include <boost/archive/xml_iarchive.hpp> 
#include <boost/archive/xml_oarchive.hpp> 

using namespace std; 

class Test { 
private:  
    friend class boost::serialization::access; 
    template<class Archive> void serialize(Archive & ar, 
      const unsigned int version) { 
     ar & BOOST_SERIALIZATION_NVP(a); 
     ar & BOOST_SERIALIZATION_NVP(b); 
     ar & BOOST_SERIALIZATION_NVP(c); 
    } 

    int a; 
    int b; 
    float c; 
public: 
    inline Test(int a, int b, float c) { 
     this->a = a; 
     this->b = b; 
     this->c = c; 
    } 
}; 

int main() { 
    std::ofstream ofs("filename.xml"); 

    Test* t = new Test(1, 2, 3.3); 

    boost::archive::xml_oarchive oa(ofs); 
    oa << BOOST_SERIALIZATION_NVP(t); 

    return 0; 
} 

ブーストを使用することは問題外である場合は、単にアイデアは、あなたのオブジェクトは非常に単純であり、互いにへの参照を持っていない提供借りることができます。

  1. あなたのクラスのそれぞれが、彼らはメンバーとのXMLDocumentを更新する彼らのSerializeメソッドでシリアル化(のXMLDocument *)方法
  2. を持ってたXMLDocument
  3. を作成します。

残念ながら、C++にはリフレクションがありません。各クラスを処理することなく簡単にシリアライズすることは不可能です。

+0

残念ながら、コードベースを強化する予定はありません。 STLがすべて使用しています。 – Soppus

+0

私の編集した回答を参照してください –

+0

@Soppus:これは経営陣に指摘することが重要なことです:この時点で、私たち自身のバージョンを展開したり、ブーストを利用したりすることができます。単一の 'serialize'を使用して異なるフォーマットにシリアライズすることができます...)、私たちの解決策には時間がかかりますが、おそらくバグがあり、通常はあまり一般的ではありません...ブーストライブラリを模倣しない限り展開するには高価になります。 –

0

私は通常simple XMLparserを使用します。 C++で書かれた1つのヘッダーと1つのソースで、他のどのソースよりもはるかに効率的です。シンプルで使いやすいです。

すべてのジョブを実行するXMLNodeというクラスを1つ使用するだけで済みます。

+0

面白そうに見える、見た目のためにArchitectにそれを与えるでしょう。 ありがとう – Soppus

関連する問題