1

私はこのように見える構造の数を持っています:

struct A
{
    long lValueA;
    BOOL bValueA;
    CString strValueA;
}; 
struct B
{
    long lValueB;
    BOOL bValueB;
    CString strValueB;
}; 
struct C
{
    A a;
    vector<B> vecB;
}; 

TinyXML2(または他のライブラリ)を使用して、構造体Cから各メンバー変数を手動で渡すことなくXMLファイルに変換することは可能ですか?私が欲しいものは次のようになります:

main()
{
  C c;
  // Some code to initialise member variable of struct C

  // pass object/structure to XML parser to get XML file.
  Some_XML_Library_Object.parse( c ); 
  Some_XML_Library_Object.SaveFile("FilePath/Name.xml");

  // Also it would be nice if we can update values in structure or class directly like this
  const char* XML_File_Path = "FilePath/Name.xml";
  Some_XML_Library_Object.updateValueOfStructureFromXML(&c,XML_File_Path)
}

XMLファイルの生成は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<A>
    <lValueA>
        value
    </lValueA>

    <bValueA>
        value
    </bValueA>

    <strValueA>
        value
    </strValueA>
</A>

<B>
    <lValueB>
        value
    </lValueB>
      ...
      ...
</B>

前もって感謝します。

4

1 に答える 1

1

boost :: serialisationを使用して、あなたが尋ねたようなことをすることができます...

http://www.boost.org/doc/libs/1_53_0/libs/serialization/doc/tutorial.html

上記のページからXML(およびその他の形式)を処理するための広範な機能があります。

このチュートリアルでは、特定のアーカイブクラス(保存にはtext_oarchive、読み込みにはtext_iarchive)を使用しました。テキストアーカイブはデータをテキストとしてレンダリングし、プラットフォーム間で移植可能です。テキストアーカイブに加えて、ライブラリにはネイティブバイナリデータとxml形式のデータのアーカイブクラスが含まれています。すべてのアーカイブクラスへのインターフェイスはすべて同じです。クラスのシリアル化が定義されると、そのクラスは任意のタイプのアーカイブにシリアル化できます。

編集:XMLを直接操作して値を変更するのではなく、オブジェクトを処理してシリアル化します。

于 2013-03-26T09:21:52.140 に答える