2011-02-23 140 views
3

我制作了如下所示的yaml文件。yaml解析的方式? (yaml-cpp)

Define1: &Define1 
    0: zero 
    1: one 

Define2: 
    <<: *Define1 
    2: two 

并尝试在Online YAML parser。结果如下所示。 (只要得到节点是如何构造的。)

{ 
    "Define1": { 
    "0": "zero", 
    "1": "one" 
    }, 
    "Define2": { 
    "0": "zero", 
    "1": "one", 
    "2": "two" 
    } 
} 

我当然希望“YAML-CPP”将解析方式相同,但它的有些不同。

我想是这样的。 (几乎肯定)

{ 
    "Define1": { 
    "0": "zero", 
    "1": "one" 
    }, 
    "Define2": { 
    "Define1": { 
     "0": "zero", 
     "1": "one" 
    }, 
    "2": "two" 
    } 
} 

到底是什么!那么我是否必须在循环时检查节点类型?

这是一个已知的问题?或'yaml-cpp'只是解析这种方式?

这段代码是我做过的。

// already parsed 
const YAML::Node& node = &(docYAML)["Define2"]; 

for (YAML::Iterator it=node->begin(); it!=node->end(); ++it) 
{ 
    const YAML::Node& nodeList = it.second(); 

    std::string str; 
    nodeList[0] >> str; 
} 

回答

4

yaml-cpp尚未实现“合并”键。如果您想要解决问题,请参阅http://code.google.com/p/yaml-cpp/issues/detail?id=41

现在,YAML-CPP实际上解析您的YAML文件:

{ 
    "Define1": { 
    "0": "zero", 
    "1": "one" 
    }, 
    "Define2": { 
    "<<": { 
     "0": "zero", 
     "1": "one" 
    }, 
    "2": "two" 
    } 
} 
+0

谢谢你的答案,谢谢你的链接。我猜这似乎仍然不支持合并,因为问题仍然存在。也许我必须寻找另一种解决方案。谢谢。 ;) – SeniorLee 2011-02-23 22:38:13