gpt4 book ai didi

c++ - 将 get_value 与 Boost 的属性树一起使用时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:45 25 4
gpt4 key购买 nike

我必须用 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);
}
}
}

所以基本上我会忽略和标记,当我在 ParametersGroup 标记中时,我会更深入,而当我在参数标记中时,我会恢复数据以执行操作。但是,我无法正确获取“名称”。

这是我在上次 else if 中扫描的那种行:

<Parameter name="box">

std::cout << name显示类似的东西:

name: ^M
^M
^M
^M
^M
^M

这显然不是我想要的。

我做错了什么?任何帮助将不胜感激。

最佳答案

由于您的问题不是特别独立,下面是我的独立反例:

Live On Coliru

#include <sstream>
#include <iostream>

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>

using namespace boost::property_tree;

int main() {
ptree pt;

std::istringstream iss("<Parameter name=\"box\" />");
xml_parser::read_xml(iss, pt);

for (auto& element : pt)
{
std::cout << "'" << element.first << "'\n";
for (auto& attr : element.second)
{
std::cout << "'" << attr.first << "'\n";
for (auto& which : attr.second)
{
std::cout << "'" << which.first << "': \"" << which.second.get_value<std::string>() << "\"\n";
}
}
}
}

打印

'Parameter'
'<xmlattr>'
'name': "box"

我希望你能看到你需要做什么(可能是树中节点的意外级别?)。直接获取叶节点:

pt.get_child("Parameter.<xmlattr>.name").get_value<std::string>()

关于c++ - 将 get_value 与 Boost 的属性树一起使用时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27377169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com