我必须用 Boost 编写一个 XML 解析器。但是我有一些麻烦。我可以毫无问题地访问节点名称,但由于某种原因,我无法使用 get_value 访问标签内的属性,这应该可以立即工作。也许我的代码中有一个我没有发现的错误?看一看:
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);
}
}
}
所以基本上我忽略和标记,当我在参数组标记中时,我会更深入,当我在参数标记中时,我会恢复数据来做事。但是,我无法正确获取“名称”。
这是我在最后扫描的那种行else if
:
<Parameter name="box">
显示的std::cout << name
内容如下:
name: ^M
^M
^M
^M
^M
^M
这显然不是我要的。
我究竟做错了什么?任何帮助将不胜感激。