遍历 YAML::Node 时如何获取当前节点的父节点?

Posted

技术标签:

【中文标题】遍历 YAML::Node 时如何获取当前节点的父节点?【英文标题】:How to get the parent node of the current node while iterating over YAML::Node? 【发布时间】:2020-08-24 19:48:43 【问题描述】:

我在迭代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?

【问题讨论】:

【参考方案1】:

你不能,因为一般来说,一个 YAML 节点没有一个父节点。

YAML 文件的内容构成有向图,而不是树。例如,这个 YAML:

- &a 123
- foo: *a

定义两个项目的序列,标量节点123 和包含单个键值对的映射节点。该对将标量 foo 作为键,标量节点 123 作为值(别名由解析器解析)。这意味着标量节点 123 是从两个地方引用的,因此没有一个父节点。

另一个问题是在一对foo: bar 中,请求bar 的父节点将产生包含该对的映射,因为该对本身不是一个节点。但你可能也想知道对应的键。

要点是,当下降到 YAML 图时,如果要回溯,则需要将路径存储在某处。

【讨论】:

以上是关于遍历 YAML::Node 时如何获取当前节点的父节点?的主要内容,如果未能解决你的问题,请参考以下文章

JQuery的遍历函数总结

如何获取节点的名称?

遍历DOM树,获取父节点

dojo在foreach中获取当前节点的父节点

剑指offer57:二叉树的下一个结点

js/jquery如何获取获取父窗口的父窗口的元素