0

私は次のように表される構造を持っています: (例)

struct struct3
{
   struct structchild4
   {  
      float child5;
   } child6;
   unsigned int child7;
};

これをXMLで次のように表現したい:

<tag1= "struct3">
        <name>struct3</name>
        <input_type>byte</input_type>
        <method></method>
        <tag_ref = "structchild4">
            <name>child6</name>
        </tag_ref>
        <tag2= "child7">
            <name>child7</name>
            <len>4</len>
            <value> </value>
        </tag2>
    </tag1>

私が従う方法は、これを gccXML 形式に変換し、Visual C++ を使用して解析することです。xerces-c DOM パーサーを使用します。

誰かがこれを行う方法を提案できますか? ありがとう!

4

1 に答える 1

1

これを行うためのより良い方法はリフレクションです。BoostLib にはすぐに使用できるものがあります。あなたは次のようなことをします:

for( Attribute::Iterator it = reflectiveObject.getAttributeList().begin();
     it != reflectiveObject.getAttributeList().end();
     ++it )
{
    XML.createNode( it.getAttributeName() );
}

//その後、メソッドについても同じです。型にサブクラスまたはサブ構造がある場合は、型を再帰的に処理する上位反復子が必要です。次に、XML を識別し、それらに対して同じコードを実行します。

リフレクションがなければかなり退屈なので、次のように Formater と Parser を作成する必要があります

if( dynamic_cast< DesirecClass* >( obj ) != NULL ){
    XML.createNode( typeid( obj ).name() );
}
// Hard Code (terrible treatment) for each attribute, etc...

検索できるデマングリング方法もいくつかあります。

于 2012-07-24T02:35:53.267 に答える