3

我正在尝试YAML::Tiny使用 C++ 解析 Perl 的 YAML 文件输出。作为 C++ 和 YAML 新手,我使用HowToParseADocument作为起点。

monsters.yaml文件(如果使用 创建YAML::Tiny)如下所示:

---
name: Ogre
position: [0, 5, 0]
powers:
  - name: Club
    damage: 10
  - name: Fist
    damage: 8
---
name: Dragon
position: [1, 0, 10]
powers:
  - name: Fire Breath
    damage: 25
  - name: Claws
    damage: 15
---
name: Wizard
position: [5, -3, 0]
powers:
  - name: Acid Rain
    damage: 50
  - name: Staff
    damage: 3

我正在寻求帮助将HowToParseADocument中的示例变形以读取修改后的 YAML 文件,---并将其作为每个条目的分隔符。我重新复制了下面的 C++ 主代码。

int main()
{
   std::ifstream fin("monsters.yaml");
   YAML::Parser parser(fin);
   YAML::Node doc;
   parser.GetNextDocument(doc);
   for(unsigned i=0;i<doc.size();i++) {
      Monster monster;
      doc[i] >> monster;
      std::cout << monster.name << "\n";
   }

   return 0;
}
4

1 回答 1

4

分隔符---将 YAML 文件拆分为多个文档(与示例中由序列组成的单个文档相反)。

你可以这样解析它:

int main()
{
   std::ifstream fin("monsters.yaml");
   YAML::Parser parser(fin);
   YAML::Node doc;
   while(parser.GetNextDocument(doc)) {
      Monster monster;
      doc >> monster;
      std::cout << monster.name << "\n";
   }

   return 0;
}
于 2011-12-15T01:15:46.250 回答