2
下面的代码试图从一个XML文件中获取数据,并将其添加到自定义SensorConfiguration类,然后添加到地图这些SensorConfigurations的加速XML - 获取下一个节点
我的问题是,它总是需要第二个foreach循环中的第一个传感器配置。 我知道为什么,但我不知道正确的语法,我不知道如何谷歌。
这里的XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<sensorconfigurations>
<configuration>
<name>SensorConfiguration1</name>
<sensorid>1</sensorid>
<signalindex>1</signalindex>
<mappingscheme>mappingscheme1</mappingscheme>
<soundpack>test1.wav</soundpack>
</configuration>
<configuration>
<name>SensorConfiguration2</name>
<sensorid>2</sensorid>
<signalindex>2</signalindex>
<mappingscheme>mappingscheme1</mappingscheme>
<soundpack>test2.wav</soundpack>
</configuration>
<configuration>
<name>SensorConfiguration3</name>
<sensorid>3</sensorid>
<signalindex>3</signalindex>
<mappingscheme>mappingscheme2</mappingscheme>
<soundpack>test3.wav</soundpack>
</configuration>
</sensorconfigurations>
</root>
这里就是整个函数的构造法:
SensorConfigurationBank::SensorConfigurationBank()
{
string m_level;
using boost::property_tree::ptree;
ptree pt;
read_xml("SensorConfigurationBank.xml", pt);
BOOST_FOREACH(ptree::value_type &v,
pt.get_child("root.sensorconfigurations"))
{
SensorConfiguration newSensorConf;
BOOST_FOREACH(ptree::value_type &w,
pt.get_child("root.sensorconfigurations.configuration"))
{
if(w.first == "name")
{
newSensorConf.setName(w.second.data());
}
if(w.first == "sensorid")
{
string stringToInt = w.second.data();
istringstream iss(stringToInt);
int value;
iss >> value;
newSensorConf.setSensorID(value);
}
if(w.first == "signalindex")
{
string stringToInt = w.second.data();
istringstream iss(stringToInt);
int value;
iss >> value;
newSensorConf.setSignalIndex(value);
}
if(w.first == "mappingscheme")
{
newSensorConf.setMappingScheme(getMappingScheme(w.second.data()));
}
if(w.first == "soundpack")
{
newSensorConf.setSoundPack(w.second.data());
}
}
sensorConfigurations_.insert(make_pair(newSensorConf.getName(), newSensorConf));
}
//save();
}
我知道这是稍微难以理解,但这里的重要组成部分:
BOOST_FOREACH(ptree::value_type &w,
pt.get_child("root.sensorconfigurations.configuration"))
相反为了获得特定的孩子的'配置',我想让它找到那个孩子第一个循环正在寻找,所以它看起来在配置#2而不是配置#1达到无限次。
它基本上只是我上面粘贴的代码的最后一行,需要以某种方式进行修改,然后我认为它会起作用!提前致谢。
啊,我所需要的只是语法'v.second'而不是pt.get_child。谢谢! – 2014-11-22 16:30:12