如何在遍历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 图中时,如果您想回溯,您需要将所走的路径存储在某处。