如何在遍历YAML::Node的同时获取当前节点的父节点?
How to get the parent node of the current node while iterating over YAML::Node?
我在迭代 YAML::Node
时正在构建树结构。到目前为止,我能够在层次结构向下时构建树。但是,如果层次结构发生变化,我将无法获取父节点。
batman:
type: super hero
entity: ""
natural: yes
attributes:
powers:
whip:
x: ""
y: ""
batmobile:
x: ""
y: ""
根据上面的结构,如何获取batmobile
的父节点?
假设,我像这样迭代:
for (YAML::const_iterator it = node.begin(); it != node.end(); ++it)
{
std::cout << it->first.as<std::string>() << std::endl; // prints batmobile
// how to get the parent node of batmobile?
}
你不能,因为通常情况下,YAML 节点没有单个父节点。
YAML文件的内容构成的是有向图,不是树。例如,这个 YAML:
- &a 123
- foo: *a
定义两个项目的序列,标量节点 123
和包含单个 key-value 对的映射节点。该对具有标量 foo
作为键和 标量节点 123
作为值 (别名由解析器解析)。这意味着标量节点 123
从两个地方引用,因此没有单个父节点。
另一个问题是,在一对 foo: bar
中,请求 bar
的父节点会产生包含该对的映射,因为该对本身不是节点。但你可能也想知道对应的密钥。
要点是,当下降到 YAML 图中时,如果您想回溯,您需要将所走的路径存储在某处。
我在迭代 YAML::Node
时正在构建树结构。到目前为止,我能够在层次结构向下时构建树。但是,如果层次结构发生变化,我将无法获取父节点。
batman:
type: super hero
entity: ""
natural: yes
attributes:
powers:
whip:
x: ""
y: ""
batmobile:
x: ""
y: ""
根据上面的结构,如何获取batmobile
的父节点?
假设,我像这样迭代:
for (YAML::const_iterator it = node.begin(); it != node.end(); ++it)
{
std::cout << it->first.as<std::string>() << std::endl; // prints batmobile
// how to get the parent node of batmobile?
}
你不能,因为通常情况下,YAML 节点没有单个父节点。
YAML文件的内容构成的是有向图,不是树。例如,这个 YAML:
- &a 123
- foo: *a
定义两个项目的序列,标量节点 123
和包含单个 key-value 对的映射节点。该对具有标量 foo
作为键和 标量节点 123
作为值 (别名由解析器解析)。这意味着标量节点 123
从两个地方引用,因此没有单个父节点。
另一个问题是,在一对 foo: bar
中,请求 bar
的父节点会产生包含该对的映射,因为该对本身不是节点。但你可能也想知道对应的密钥。
要点是,当下降到 YAML 图中时,如果您想回溯,您需要将所走的路径存储在某处。