0

次のような XML ファイルがあります。

 <shape name="rightellipsoid" type="instance" id="eggBase">
    <transform name="xform1">
      <translate>2.5 1.5 -4.0</translate>
      <rotate axis="X">90.0</rotate>
      <scale>1.0 0.5 1.5</scale>
      <rotate axis="Y">95.0</rotate>
    </transform>
  </shape>

次を使用して、翻訳とスケーリングの値を取得できます。

boost::optional<Vector3D> scale = v.second.get_optional<Vector3D>("scale");

注: Vector3D は私のデータ型です

しかし、回転ノードに対して同じことを行うと、常に最初の値が返されます。2 番目の回転ノードの値を取得するにはどうすればよいですか?

4

1 に答える 1

1

次のようなことを試してください:

std::string rotate_x, rotate_y;
boost::property_tree::ptree pt;

BOOST_FOREACH( ptree::value_type const& val, pt.get_child("shape.transform") ) 
{
    if(val.first == "rotate") 
    {
        std::string temp = val.second.get_child("<xmlattr>.axis").data();

        if(temp == "X") rotate_x = val.second.data();
        if(temp == "Y") rotate_y = val.second.data();
    }
}
于 2013-11-07T09:18:56.410 に答える