次の XML ドキュメントがあります。
<root>
<scenario name="ScenarioA">
<param name="ParamA">1</param>
<param name="ParamB">2</param>
<param name="ParamC">3</param>
</scenario>
<scenario name="ScenarioB">
<param name="ParamA">1</param>
<param name="ParamB">2</param>
<param name="ParamC">3</param>
</scenario>
<scenario name="ScenarioC">
<param name="ParamA">1</param>
<param name="ParamB">2</param>
<param name="ParamC">3</param>
</scenario>
</root>
を使用boost::property_tree::ptree
すると、次のようにして最上位の要素を反復処理できます。
ptree scenarioTree = myTree.get_child("root");
for (const auto& itr : scenarioTree) {
if (itr.second.get<std::string>(<xmlattr>.name) == "ScenarioA") {
// additional logic
}
}
で同じ方法を使用して、各シナリオで「param」タグの属性を取得できませんitr.second
。
ptree scenarioTree = myTree.get_child("root");
for (const auto& itr : scenarioTree) {
if (itr.second.get<std::string>(<xmlattr>.name) == "ScenarioA") {
ptree paramTree = itr.second;
// Iterate through "param" tags
for (const auto& paramItr: paramTree) {
if (paramItr.second.get<std::string>(<xmlattr>.name) == "ParamA") {
// doesn't exist
}
}
}
}
私は何を間違っていますか?私の理論では、これは ptree イテレータが返すもの (自己) と標準の ptree の間のキャストの問題ですが、内部の子属性を取得する方法が他にわかりません。param タグ名 (first 経由) と param 値 (second.data() 経由) を取得できますが、属性はありません。