Мне нужно написать синтаксический анализатор XML с Boost. Однако у меня есть некоторые проблемы. Я могу получить доступ к имени узла без каких-либо проблем, но по какой-то причине я не могу получить доступ к атрибутам внутри тега, используя get_value, который должен работать мгновенно. Может быть, в моем коде есть ошибка, которую я не заметил? Посмотрите:Проблема с использованием get_value с деревьями свойств Boost
void ParametersGroup::load(const boost::property_tree::ptree &pt)
{
using boost::property_tree::ptree;
BOOST_FOREACH(const ptree::value_type& v, pt)
{
name = v.second.get_value<std::string>("name");
std::string node_name = v.first;
if (node_name == "<xmlattr>" || node_name == "<xmlcomment>")
continue;
else if (node_name == "ParametersGroup")
sg.load(v.second); // Recursion to go deeper
else if (node_name == "Parameter")
{
// Do stuff
std::cout << "PARAMETER_ELEM" << std::endl;
std::cout << "name: " << name << std::endl;
std::cout << "node_name: " << node_name << std::endl << std::endl;
}
else
{
std::cerr << "FATAL ERROR: XML document contains a non-recognized element: " << node_name << std::endl;
exit(-1);
}
}
}
Поэтому в основном я игнорирую и теги, когда я нахожусь в ParametersGroup теге я иду глубже, и когда я нахожусь в теге параметров я восстановить ДАННЫЕ, чтобы делать такие вещи. Однако я не могу правильно получить «имя».
Это вид линий я сканирование в последнем else if
:
<Parameter name="box">
В std::cout << name
показывает, что такие вещи, как:
name: ^M
^M
^M
^M
^M
^M
которого obvisouly не то, что я прошу ,
Что я делаю неправильно? Любая помощь будет принята с благодарностью.
Пожалуйста сделайте ваш образец самодостаточными – sehe