Способ разбора yaml?(YAML-CPP) - PullRequest
       9

Способ разбора yaml?(YAML-CPP)

3 голосов
/ 23 февраля 2011

Я сделал файл yaml, как показано ниже.

Define1: &Define1
  0: zero
  1: one

Define2:
  <<: *Define1
  2: two

И пробовал в Онлайн YAML-парсер . Результат как ниже. (Просто узнайте, как строятся узлы.)

{
  "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;
}

1 Ответ

4 голосов
/ 23 февраля 2011

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"
  }
}
...