質問

私はboost::property_treeを使用しています。ドキュメントには、非常に曖昧でほとんどの部分は全体的に役に立たないです。ソースを見ると/例はどちらかという多くの助け、しませんでした。

私は思ったんだけどは、次のとおりである:

<VGHL>
    <StringTable>
        <Language>EN</Language>
        <DataPath>..\\Data\\Resources\\Strings\\stringtable.bst</DataPath>
    </StringTable>
</VGHL>

どのように反復現在のレベルのすべての要素の上にできますか?私はこれを行う場合:

read_xml(fin, bifPropTree);
VGHL::String tablePath;
BOOST_FOREACH(boost::property_tree::wiptree::value_type &v, 
              bifPropTree.get_child(L"VGHL.StringTable"))
{
    m_StringTable->ParseEntry(v.second, tablePath);
}

ParseEntryでは、私はこれを試してみてください

VGHL::String langName = stringTree.get<VGHL::String>(L"StringTable.Language");

例外の結果は(存在していないではありません)。私もこれを試してみた:

VGHL::String langName = stringTree.get<VGHL::String>(L"Language");

同じ問題ます。

私はParseEntryを呼び出すときに私の理解から、私はそのノードでツリーへの参照を渡しています。

これに対処するためにどのような方法は、私はプロパティツリーを使用してStringTableの複数のエントリを持っているとき、ありますか?

役に立ちましたか?

解決

ParseEntryは、現在のレベルの子ノードの各々への参照を受け取ります。すでに子ノードを持っているので、だから、あなたは、ノード名を使用して値を求めることはできません。ノード名は、のv.first の中に保存されます。

あなたは、レベルを選択し、のBOOST_FOREACH の反復するために、のget_child の使用して、指定されたレベルのすべての要素を反復処理することができます。各反復子は、ノードの名前を表す一対のノードデータになります。

using boost::property_tree::wiptree;

wiptree &iterationLevel = bifPropTree.get_child(L"VGHL.StringTable");
BOOST_FOREACH(wiptree::value_type &v, iterationLevel)
{   
  wstring name = v.first;
  wstring value = v.second.get<wstring>(L"");
  wcout << L"Name: " << name << L", Value: " << value.c_str() << endl;
}

このコードは印刷します:

  

名前:言語、値:EN

     

名称:データパス、値.. \\ \\データリソース\\文字列\\ stringtable.bst

あなたが反復したくない場合は、ノード・レベルを選択し、自分の名前を使用してノードを探すことができます:

wiptree &iterationLevel = bifPropTree.get_child(L"VGHL.StringTable");
wstring valueLang = iterationLevel.get<wstring>(L"Language");
wstring valuePath = iterationLevel.get<wstring>(L"DataPath");
wcout << valueLang << endl << valuePath << endl;

このコードは印刷します:

  

EN

     

.. \\ \\データリソース\\文字列\\ stringtable.bst

他のヒント

私は、プロパティツリーを使用し、それは気の利いに見えるよう、おそらくしませんしました。いくつかの簡単な観察いえます:

万一GETのテンプレートパラメータは、戻り値の型と同じではない?

VGHL ::文字列langName = stringTree.get(...);

しかし、これはコンパイル時にエラーが生じていたとして、これは、ここでは最も可能性の高い問題ではありません。

わからないL "VGHL.StringTable.Language" 引数が動作するかどうか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top