我在.yaml中有这样的配置:
server:
- address: "0:0"
- address: "0:0"
virtual-hosts:
- address: "0:0"
- http:
root: "/www/index.html"
server-name: "lambda"
- address:
protocol: http-1.0
modules:
- ssl-2.7
- cgi-php-1.0我试图从每个键(从每个节点)中提取每个值,但是当我开始使用YAML::const_iterator或YAML::iterator遍历所有这些键时,系统提示我出现以下错误:invalid node; this may result from using a map iterator as a sequence iterator, or vice-versa。我试图检查map迭代器和序列迭代器之间的区别,但我甚至找不到有用的文档。
以下是我在阅读YAML CPP参考资料并在此处查找解决方案后尝试的一些代码:
YAML::Node config = YAML::LoadFile(path);
YAML::Node vhosts_n = config["virtual-hosts"];
...
for(YAML::iterator param = vhosts_n.begin(); param != vhosts_n.end(); ++param) {
std::string tmp = param->first.as<std::string>();
std::cout << tmp << std::endl;
}for(YAML::iterator param = vhosts_n.begin(); param != vhosts_n.end(); ++param) {
std::string tmp = *param;
std::cout << tmp->first.as<std::string>() << std::endl;
}for(YAML::const_iterator param = vhosts_n.begin(); param != vhosts_n.end(); ++param)
std::cout << param->first.as<std::string>() << std::endl;发布于 2021-02-25 23:02:14
我不能完全确定这是否是一个bug,但是你可以使用param->begin()作为你循环中的一个步骤。举个例子:
#include "yaml-cpp/yaml.h"
#include <iostream>
#include <string>
int main()
{
YAML::Node config = YAML::LoadFile("YOUR PATH");
YAML::Node vhosts_n = config["virtual-hosts"];
for(YAML::const_iterator param = vhosts_n.begin(); param != vhosts_n.end(); ++param)
{
switch (param->Type()) {
case YAML::NodeType::Null:
std::cout << "null" << std::endl;
break;
case YAML::NodeType::Scalar:
std::cout << "scalar" << std::endl;
break;
case YAML::NodeType::Sequence:
std::cout << "seq" << std::endl;
break;
case YAML::NodeType::Map:
{
std::cout << "map" << std::endl;
auto n = param->begin();
std::string map_first = n->first.as<std::string>();
std::string map_second = n->second.as<std::string>();
std::cout << map_first << " " << map_second << std::endl;
break;
}
case YAML::NodeType::Undefined:
std::cout << "undef" << std::endl;
}
}
}请注意,代码会因为以下原因而崩溃:
- http:
root: "/www/index.html"
server-name: "lambda"你必须处理好这个案子。
https://stackoverflow.com/questions/66369588
复制相似问题