0

次の 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() 経由) を取得できますが、属性はありません。

4

1 に答える 1